{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Basic Image Classification with Feedforward NN and LetNet5"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "All libraries we introduced in the last chapter provide support for convolutional layers. We are going to illustrate the LeNet5 architecture using the most basic MNIST handwritten digit dataset, and then use AlexNet on CIFAR10, a simplified version of the original ImageNet to demonstrate the use of data augmentation.\n",
    "LeNet5 and MNIST using Keras."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Imports"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 45,
   "metadata": {},
   "outputs": [],
   "source": [
    "%matplotlib inline\n",
    "from random import randint\n",
    "import numpy as np\n",
    "import pandas as pd\n",
    "\n",
    "from keras.models import Sequential\n",
    "from keras import models, layers\n",
    "from keras.datasets import mnist\n",
    "from keras.utils import np_utils\n",
    "import keras.backend as K\n",
    "from keras.callbacks import ModelCheckpoint   \n",
    "from keras.models import Sequential\n",
    "from keras.layers import Conv2D, AveragePooling2D, Dense, Dropout, Flatten\n",
    "from keras.losses import categorical_crossentropy\n",
    "import matplotlib.pyplot as plt\n",
    "import matplotlib.cm as cm"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Load MNIST Database"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "The original MNIST dataset contains 60,000 images in 28x28 pixel resolution with a single grayscale containing handwritten digits from 0 to 9. A good alternative is the more challenging but structurally similar Fashion MNIST dataset that we encountered in Chapter 12 on Unsupervised Learning."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "We can load it in keras out of the box:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2017-06-02T19:25:09.741150Z",
     "start_time": "2017-06-02T19:25:06.240184Z"
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "The MNIST database has a training set of 60000 examples.\n",
      "The MNIST database has a test set of 10000 examples.\n"
     ]
    }
   ],
   "source": [
    "# use Keras to import pre-shuffled MNIST database\n",
    "(X_train, y_train), (X_test, y_test) = mnist.load_data()\n",
    "\n",
    "print(\"The MNIST database has a training set of %d examples.\" % len(X_train))\n",
    "print(\"The MNIST database has a test set of %d examples.\" % len(X_test))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "((60000, 28, 28), (10000, 28, 28))"
      ]
     },
     "execution_count": 3,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "X_train.shape, X_test.shape"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Visualize Data"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Visualize First 10 Training Images"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "The below figure shows the first ten images in the dataset and highlights significant variation among instances of the same digit. On the right, it shows how the pixel values for an indivual image range from 0 to 255."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2017-06-02T19:25:15.903865Z",
     "start_time": "2017-06-02T19:25:14.462964Z"
    }
   },
   "outputs": [
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAABX0AAAI6CAYAAAB7FeuaAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDMuMC4xLCBodHRwOi8vbWF0cGxvdGxpYi5vcmcvDW2N/gAAIABJREFUeJzs3XmcpVV5J/DfgWYN0sgiYIyiUVRgoMOiSBhARXAAFUVABkRcUKMIOpEhIhocZFHRBFTcUJAlgwtBwCVo2BQRAhLJIMEgCgg0ytYszW6d+ePejmWn+9yurvW+/f1+PvWprvt77zlPN90PVU+9dW6ptQYAAAAAgG5YbroLAAAAAABg4hj6AgAAAAB0iKEvAAAAAECHGPoCAAAAAHSIoS8AAAAAQIcY+gIAAAAAdIihLwAASZJSyhmllFpKecZ019IlpZTLSilPTsA6H+3/99l2IuoCAKC7DH0BADqsPyRsvR0whbW8rb/nfkvx3L1KKZ/pD1Af7K9z6hI8b9tSyvdKKfeWUh4upVxbSjm4lLL8GPaetYg/t8dKKXeVUn5aSvlSKWXnUsqUf249qrZ/nuq9AQCYuWZNdwEAAEyJjyzm8Z+N+vWhST6a5M7JL2fMPpxk4yQPJrk9yfMHPaGUskeSryd5OMnXktyX5NVJTkjykiT7jLGGmuT/9H+9fJI1+jW9KcnbkvxLKWXfWusvF3re/0yyyhj3WpS/T3JGklsmYC0AADrM0BcAYBlQaz1yCa6Zm2Tu5FezVA5OcmuSm5K8PMkPWheXUtZI8sUkTyTZrtb6r/3HP5zkkiRvKKWcXWv95hhqGFnUn2MpZb0kn03yuiT/XErZstZ694K81nrrGPZYrP6adw+8EACAZZ7jHQAASLLoM31LKc/tP3ZyKeX5pZRv9I81GFlwtmwp5c/7+U2llEdKKfeUUv5fKeVzpZSn9q+5LMmX+suevtBRCQPPEK61XlRr/WWttS7hb2evJGsmOXPBwLe/ziNJPtT/8K+WcK1Btd3Z3+9HSZ6V5G9G54s707eUsnIp5f+UUn5dSnm0lPKr/serLurIhoXP9C2lvC29oXaSvHyhP9MjRj1v91LKRaWUO/vHUtxeSrmklPLOifj9AwAw87jTFwCAJbFhkn9Jcn16RwysmuTBUsqfJrkqyWpJvpvkm+kdZfDsJPund5TCfUm+kuTeJK9Kck6Sfxu19gOTUO/L+u//aRHZJUkeTbJtKWWFWusTi7hmTGqtvy+lHN3f738meX/r+v75v+ckeWWS/0jymSQrJnlrkv+2hNtek+So9IbYv05y2qjsh/193pXeXchzk5yX3p3CT0uyWXrHUnx+CfcCAGCIGPoCACwDSilHLuLhm2utpy7hEv89yVG11g8vtO77kjw1yUG11s8ulK2W5MkkqbV+pT/ofFWSf6y1njG238GYLTjz9z8WDmqtj5dSbulfs0GSGydozx8mGUmyfinlz2qtv2lc+6b0Br6XJNm51vp4kpRS/ja94fpAtdZrSin/lt7Q91eLOcLjHekNuDcdfeREf6+1l2QfAACGj6EvAMCy4W8X8dilSU5dwuffkd6LvC3OIws/UGt9aAnXngyz++/vX0y+4PE1JmrDWusjpZT7kqyVZJ0kg4a+SfLBBQPf/hr3lVI+miX/77IknsgfjoH4TwsPgQEA6A5n+gIALANqrWURbzuMYYmfjR5OjnJukvlJPl9K+WYp5cBSykallDIhhQ+fBb/vQWcP/0V6d0FfsYjssgms58wkT0lyfSnlU6WU17jDFwCg+wx9AQBYEncu6sFa66+SvDjJt5K8IskXk/w8yc2llIOmrrz/YsGdvLMXky94fN5EbVhKWTV/uHP4rsZ1JcnqSe6utY4s4pLfTlRNtdaPJ3lzktuSvDe9/06/K6VcWErZfKL2AQBgZjH0BQBgSSz2ztVa689rrXuld6zBlkkOT7JCkk+XUt60uOdNsl/032+4cFBKWSHJs9I78uDmCdxzu/Q+v7691nrb4i6qtdYkDyZZu3/O8cLWncCaUms9tdb64iRrJtktySlJXprkglLKWhO5FwAAM4OhLwAAE6LW+mSt9ae11mOT7Nt/ePdRl/y+/375KSjnov77Vy4ie2mSlZP8qNb6X866XRqllOXTG3YnyT8swVP+Nb3X19h6Edm2Y9h6wZ3CA/9Ma63zaq3fqbW+NcnpSdYe414AAAwJQ18AAJZaKWXLUsrqi4gW3K368KjH7um/f+bkVpUk+XqSe5PsW0r5iwUPllJWSXJU/8PPTcRGpZT1knwtyX9P8uskH1uCp53Wf390/87jBWs9NckRS7p3/3iI+7KYP9NSyksXPl+5//HT+h8+/F+fBQDAsJs13QUAADDUDkjy1lLKj5LclN4Zuc9N8qokjyY5YdS1l/cf++tSytPyh7NrT6i1PtjapJTyuiSv7n+4fv/9tqWUU/u//m2t9bAF19da55VS3p7e8PeHpZSvpTccfXV6Rz6cVWv95hh/r8uVUo5c8Ov0zu/dJL27ZVdI70XZ9q213rPop/+RU5Lsnd45yP+vlHJ+khWTvD7Jv6T3Z7io834X5cIkry+lnJveHcRPJrmk1npZkvOT3FdKuSK9oyyWT284vWV/n4uXcA8AAIaIoS8AAONxZnqfU26T3iBxlSS3p3fEwfG11usXXFhrvbuUskeSD6f34mJ/0o9OTe+M25bNkyx8PvCf99+S3sD5sNFhrfXsUsoO6d05u0d6RzrcmOSQJJ9d0t/gKCXJ3/Z//Xi/5luSfDXJN5P8YDEvzPZf1FpHSimvSfLBJPslOTjJHUm+nOTk9I7FeGAJ63pPeoPel6d3Zu9yST6U5LIk/zvJTkm2SLJrekP3m/uPf67W+uQS7gEAwBApvdeRAAAAZoJSyv9I8t0kH621fmi66wEAYPg40xcAAKZBKeXpi3hs7STH9j88Z2orAgCgKxzvAAAA0+PEUspGSX6S5K4kf5bkfyR5apLP1lqvmc7iAAAYXoa+AAAwPc5OsnZ6L3q3Rnrn7V6X5ORa61emszAAAIabM30BAAAAADrEmb4AAAAAAB1i6AsAAAAA0CGGvgAAAAAAHWLoCwAAAADQIYa+AAAAAAAdYugLAAAAANAhhr4AAAAAAB1i6AsAAAAA0CGGvkOulHJAKaWOeptfSrm5lHJOKWWvUkpZ6PoN+tcdMI69Nhj12JGllJeN8/dw80K/hwVvu49nXWBydKTvLFdK+UC/7kdLKdeWUvYYz5rA5OlC31lojzf097htotYEJlYX+k4p5X+VUs4vpcztr3/keNYDJldH+s7apZSvlFLuKqU8Ukq5spSy83jWZOkZ+nbHnklekmSXJB9K8liS/5vkB6WUVUZdN7d/3XeWYo/v9J87d9Rjf5tkIr4IuqC/9ui3SydgXWDyDHPfOSrJkUk+k+R/JLkiyTdKKbuMc11gcg1z30mSlFLWSPL3Se6ciPWASTfMfefAJE9L8q1xrgNMraHsO6WUlZJclOSVSf53ktcl+U2Sb5dSdljadVl6s6a7ACbMz2qtvxz18emllG8k+UaSjyd5T5LUWh9Lb7gxZrXWu5LcNd5CF+PuWutS1QVMm6HsO6WUpyV5f5Ljaq3H9x++uJTy3CTHJfnuRO4HTKih7DsL+XiSa9P7ImvHSdwHmBjD3Hc2rrWOlFJmJXnnJKwPTI5h7Tt7JvlvSV5aa70kSUop/5Te5z0fT/KiCd6PAdzp22G11rOTnJvkwFLKqsnib/8vpbx31I85/0spZZv+x6eOuuaPbv8vpdR+9MFRP35w5OT/zoCZakj6zs5JVkxyxkKPn5Hkv5VSnj3G9YBpNCR9Z8Haf5lkvyTvXprnAzPDsPSdWuvI0vz+gJlnSPrO1kkeWTDw7dddk3w/yVallD8d43qMk6Fv9303yUpJtlzcBaWUtyX5uyT/nOQ1SU5N8g9J1hiw9kv670/NH45kOLm/5g5jPFvmVaWUh0spj5VSrijO84VhNtP7zsbp/YjULxd6/Of99xsNeD4w88z0vpNSygpJvpjkEwvdvQMMpxnfd4DOmel95/dJnljE44/1328y4PlMMMc7dN+t/ffrLyospSyX3rkt36u1vm3U43cmObu1cK31itI7R/z2RRzNUNP7B78k310+P8lVSX6dZN0kByU5p5TyxlrrwnfiATPfTO87ayaZ1/+u82j3jsqB4TLT+06SHJbeF2rHLsG1wMw3DH0H6JaZ3nd+kWT1UsoLa63/PurxBQNlX2dNMUPf7lvw6o4LDzcWeEb/7cMLPX5ukieXdtNa66VZwr9ftdb3jP64lHJOeufSHJv/+uPXwMw34/sO0Dkzuu+U3pnhH0zy2lrro0u7HzCjzOi+A3TSTO87/5DkI0m+Wkp5a3qvX/D2JNv1c9+smmKOd+i+P+u/n7uYfMF3iH43+sFa6++T3D1ZRbX09/5GkmeUUhb5HSxgRpvpfee+JGuU/reyR1nwned7Awybmd53Tkzv1ayvKKWsUUpZI72zxUv/41XaTwdmoJned4DumdF9p9Y6L8nrkqyd5N/Se6G4tyQ5sn/J4upmkhj6dt+uSR5N8tPF5Av+0T1t9IOllOXT+4c63Rb3HSxg5prpfefn6f2I9Z8v9PiCs3yvn4IagIk10/vORkl2Se+bTgve9kny9P6vHfkAw2em9x2ge2Z836m1/ii9r7M2TPLC/vsnkjySxdfNJDH07bBSyh5JXp3k87XWhxdz2W39tz0Xenz3LNnt+48nmdC7U0ops5LsneTWWuudE7k2MLmGpO/8U3qfeOy70OP7Jbmu1vrrcawNTLEh6TtvSPLShd4uSO+um5cm+cw41gam2JD0HaBDhqnv1J4ba603JFk1yYFJTq+1zh/v2oyNs4C6Y04pZe30flTwmUl2S+8f+g+SfGBxT6q1jpRSPpLkS6WUk9M7VuE5Sf4myf0ZfObK9Ul2LaX8U3p3qtxRa72jlLJ9kguTvKXWetrinlxK2Se9V5T8bpLfpPdCbu9Osnl6d8AAM9dQ9p1a6+9KKZ9K8oFSyoNJrknvG00vS+8TKWDmGta+s/ALoqT/CtiP1VovGbA3ML2Gsu8kSSllyyQb5A83e21USnl9/9ffbQyOgOk1zH3n2PTu6L07yXOTHJreDTeLrZvJY+jbHd/ov380vfNbrknvrpJvLuIV6v9IrfXkUspqSd6X/p1u/ffnpdcYWg5K75y689P7cemPpHdeS0myfAbfTf7r9H704BPpnac5P8nVSV5Za71gwHOB6TWsfSfpvaDSQ0kOSbJeeq80u1et9dtL8Fxg+gxz3wGG0zD3nYOSvGnUx3vmD3cAPjvJzUuwBjD1hrnvrJvk79Ob8/wuyTlJ/rbW6nVTpkEZ8PeFZVT/u8JXJdm/1nr6dNcDdJ++A0w1fQeYavoOMNX0nWWXoS8ppTw7vSMVfpTkgfQO2z48vfNcNvFjP8BE03eAqabvAFNN3wGmmr7DaI53IOm9iuImSfZP8tT0zm755yR/oyEAk0TfAaaavgNMNX0HmGr6Dv/Jnb4AAAAAAB3iRScAAAAAADrE0BcAAAAAoEOm9EzfUoqzJGCGqLWW6a5hKug7MHPoO8BUWxb6jp4DM8ey0HMSfQdmklbfcacvAAAAAECHGPoCAAAAAHSIoS8AAAAAQIcY+gIAAAAAdIihLwAAAABAhxj6AgAAAAB0iKEvAAAAAECHGPoCAAAAAHSIoS8AAAAAQIcY+gIAAAAAdIihLwAAAABAhxj6AgAAAAB0iKEvAAAAAECHGPoCAAAAAHSIoS8AAAAAQIcY+gIAAAAAdIihLwAAAABAhxj6AgAAAAB0iKEvAAAAAECHGPoCAAAAAHSIoS8AAAAAQIcY+gIAAAAAdIihLwAAAABAhxj6AgAAAAB0iKEvAAAAAECHGPoCAAAAAHSIoS8AAAAAQIcY+gIAAAAAdIihLwAAAABAhxj6AgAAAAB0iKEvAAAAAECHzJruAgBgvLbYYotmftBBBzXz/ffff+Aep512WjP/9Kc/3cyvueaagXsAAADARHCnLwAAAABAhxj6AgAAAAB0iKEvAAAAAECHGPoCAAAAAHSIoS8AAAAAQIcY+gIAAAAAdIihLwAAAABAh5Ra69RtVsrUbcZiLb/88s189uzZk7r/QQcd1MxXXXXVgWs8//nPb+bvfve7m/nxxx/fzPfZZ59m/uijjzbz4447rpl/5CMfaeZTodZapruGqaDvdMOcOXOa+UUXXdTMV1999YksZ5Huv//+Zr7WWmtNeg0znb4DU+vlL395Mz/zzDOb+fbbb9/Mf/GLX4y5pqm2LPQdPYeJcsQRRzTzQV/DLLdc+56yHXbYoZlfeumlzXwYLAs9J9F3YCZp9R13+gIAAAAAdIihLwAAAABAhxj6AgAAAAB0iKEvAAAAAECHGPoCAAAAAHSIoS8AAAAAQIcY+gIAAAAAdMis6S5gWfPMZz6zma+44orNfJttthm4x7bbbtvM11hjjWa+xx57DNxjut12223N/MQTT2zmr33ta5v5gw8+2MyvvfbaZn7ppZc2c+CPvehFL2rmZ599djOfPXt2M6+1NvNB/+aT5PHHH2/ma621VjPfeuutm/k111wzrv1htO22266ZD/r7es4550xkOUyTrbbaqplfddVVU1QJMN0OOOCAgdccdthhzXxkZGRcNQz6fAyAieVOXwAAAACADjH0BQAAAADoEENfAAAAAIAOMfQFAAAAAOgQQ18AAAAAgA4x9AUAAAAA6BBDXwAAAACADpk13QV0zZw5c5r5RRdd1Mxnz549keUMpZGRkYHXHHHEEc38oYceauZnnnlmM587d24zv++++5r5L37xi2YOXbPqqqs2880337yZn3HGGc18/fXXH3NNY3HjjTcOvObjH/94Mz/rrLOa+Y9//ONmPqivHXvssc0cRtthhx2a+fOe97xmfs4550xgNUyW5ZZr37/x7Gc/u5k/61nPauallDHXBMxMg/69J8nKK688BZUAE+XFL35xM99vv/2a+fbbb9/MN9544zHXNNr73//+gdfccccdzXzbbbdt5oO+jrzyyisH1tBl7vQFAAAAAOgQQ18AAAAAgA4x9AUAAAAA6BBDXwAAAACADjH0BQAAAADoEENfAAAAAIAOMfQFAAAAAOiQWdNdQNfceuutzfyee+5p5rNnz57IcibFlVde2cznzZvXzF/60pc288cff3xgDaeffvrAa4Cp84UvfKGZ77PPPlNUydLZfPPNB16z2mqrNfNLL720me+www7NfNNNNx1YAyyp/fffv5n/5Cc/maJKmEzrr79+Mz/wwAOb+RlnnNHMb7jhhjHXBEyPHXfcsZm/5z3vGfceg3rCbrvt1sx/+9vfjrsGWJbsvffezfyEE05o5muvvXYzL6U080suuaSZr7POOs38E5/4RDNfEoNqHFTDG97whnHXMMzc6QsAAAAA0CGGvgAAAAAAHWLoCwAAAADQIYa+AAAAAAAdYugLAAAAANAhhr4AAAAAAB1i6AsAAAAA0CGzpruArrn33nub+aGHHtrMd9ttt2b+r//6rwNrOPHEEwde0/Kzn/2smb/iFa9o5vPnz2/mG2+8cTM/5JBDmjkwtbbYYouB1+y6667NvJQyrhouvfTSZn7++ec38+OPP76Z33HHHQNrGNR/77vvvmb+spe9rJmP988IRltuOd/XXxacfPLJ43r+jTfeOEGVAJNt2223beannHJKM589e/a4a/jEJz7RzG+55ZZx7wFdMWtWe9y25ZZbDlzjS1/6UjNfddVVm/kPf/jDZn7UUUc188suu6yZr7TSSs3861//ejNPkp122mngNS1XX331uJ7fdb4iAAAAAADoEENfAAAAAIAOMfQFAAAAAOgQQ18AAAAAgA4x9AUAAAAA6BBDXwAAAACADjH0BQAAAADokFnTXcCy5lvf+lYzv+iii5r5gw8+OHCPzTbbrJm/9a1vbebHH398M58/f/7AGlp+/vOfN/O3v/3t41ofGJs5c+Y08x/84AcD11h99dWbea21mX/ve99r5vvss08z33777Zv5EUcc0cxPPvnkZp4kd911VzO/9tprm/nIyEgz33XXXZv55ptv3syvueaaZk53bLrppgOvWXfddaegEqbb7Nmzx/X8JenvwMzwpje9qZk//elPH/cel1xySTM/7bTTxr0HLCv222+/Zr4kX38MMuj/43vvvXczf+CBB8a1/6D1d9ppp3GtnyS33XZbM//qV7867j26zJ2+AAAAAAAdYugLAAAAANAhhr4AAAAAAB1i6AsAAAAA0CGGvgAAAAAAHWLoCwAAAADQIYa+AAAAAAAdYugLAAAAANAhs6a7AP7YAw88MO417r///nE9/8ADD2zmX/va15r5yMjIuPYHJtaGG27YzA899NBmPnv27IF73H333c187ty5zfyrX/1qM3/ooYea+Xe+851x5TPBKqus0sz/+q//upnvu+++E1kOM9guu+wy8JpBf58YDuuuu24zf/aznz2u9W+//fZxPR+YOGuvvXYzf8tb3tLMB30NNm/evIE1fPSjHx14DdBz1FFHNfPDDz+8mddaB+5x0kknNfMjjjiimU/EfKnlgx/84KSunyQHH3xwM7/rrrsmvYZh5k5fAAAAAIAOMfQFAAAAAOgQQ18AAAAAgA4x9AUAAAAA6BBDXwAAAACADjH0BQAAAADoEENfAAAAAIAOmTXdBTDxjjzyyGa+xRZbNPPtt9++me+4447N/Pvf/34zBybWSiut1MyPP/74Zr7LLrs08wcffHBgDfvvv38zv/rqq5v5KqusMnCPZd0zn/nM6S6BGeL5z3/+uNf4+c9/PgGVMNkG9e911123mf/Hf/xHM1+S/g5MjA022KCZn3322ZO6/6c//emB11x88cWTWgMMkw9/+MPN/PDDD2/mjz/+eDO/4IILBtZw2GGHNfNHHnlk4BotK6+8cjPfaaedmvmgr09KKQNr+OhHP9rMzz333IFrsHju9AUAAAAA6BBDXwAAAACADjH0BQAAAADoEENfAAAAAIAOMfQFAAAAAOgQQ18AAAAAgA4x9AUAAAAA6JBZ010AE2/+/PnN/MADD2zm11xzTTP/0pe+1MwvvvjiZn711Vc3889+9rPNPElqrQOvgWXFX/zFXzTzXXbZZVzrv+Y1rxl4zaWXXjquPYCpddVVV013CUNv9dVXb+avfOUrm/l+++03cI+ddtppTDUt7Kijjmrm8+bNG9f6wJIb1BM23XTTca1/4YUXNvMTTjhhXOtD16yxxhrN/F3velczHzSTuOCCC5r57rvv3swnwnOf+9xmfuaZZzbzLbbYYlz7f/Ob3xx4zcc//vFx7UGbO30BAAAAADrE0BcAAAAAoEMMfQEAAAAAOsTQFwAAAACgQwx9AQAAAAA6xNAXAAAAAKBDDH0BAAAAADpk1nQXwNS76aabmvkBBxzQzE855ZRm/sY3vnFc+Z/8yZ808yQ57bTTmvncuXMHrgFd8alPfaqZl1Ka+aWXXjqunCWz3HLt77OOjIxMUSWQrLnmmtO6/2abbdbMB/WtJNlxxx2b+TOe8YxmvuKKKzbzfffdt5kP+jf9yCOPNPMrr7yymSfJY4891sxnzWp/Kv/Tn/504B7AxNh9992b+XHHHTeu9S+77LJm/qY3vamZ33///ePaH7pm0OcBa6+99rjWP/jgg5v50572tIFrvPnNb27mr371q5v5Jpts0sxXW221Zl5rHVd+xhlnNPMkmT9//sBrWHru9AUAAAAA6BBDXwAAAACADjH0BQAAAADoEENfAAAAAIAOMfQFAAAAAOgQQ18AAAAAgA4x9AUAAAAA6JBZ010AM88555zTzG+88cZm/qlPfaqZv/zlL2/mxxxzTDNPkmc961nN/Oijj27mt99++8A9YKbYbbfdmvmcOXOaea21mZ933nljromxGxkZaeaD/jv97Gc/m8hyGGKPPPLIwGsG/X36/Oc/38wPP/zwMdU0VptuumkzL6UMXOPJJ59s5g8//HAzv/7665v5V77ylWZ+9dVXN/NLL720mf/2t79t5kly2223NfNVVlmlmd9www0D9wCWzAYbbNDMzz777End/1e/+lUzX5KeAvzB448/3szvuuuuZr7OOus081//+tfNfNDnahPhjjvuaOYPPPBAM19//fWb+d13393Mzz///GbO5HOnLwAAAABAhxj6AgAAAAB0iKEvAAAAAECHGPoCAAAAAHSIoS8AAAAAQIcY+gIAAAAAdIihLwAAAABAh8ya7gIYPtddd10z32uvvZr5q171qmZ+yimnDKzhHe94RzN/3vOe18xf8YpXDNwDZopVVlmlma+44orN/He/+10z/9rXvjbmmpZFK620UjM/8sgjx7X+RRdd1Mw/8IEPjGt9uuNd73rXwGtuueWWZr7NNttMVDlL5dZbb23m3/rWtwau8e///u/N/IorrhhTTVPt7W9/+8Br1llnnWb+q1/9aqLKAQY47LDDmvnIyMik7n/cccdN6vqwrJk3b14z33333Zv5t7/97Wa+5pprNvObbrqpmSfJueee28xPPfXUZn7vvfc287POOquZr7/++uN6PtPPnb4AAAAAAB1i6AsAAAAA0CGGvgAAAAAAHWLoCwAAAADQIYa+AAAAAAAdYugLAAAAANAhhr4AAAAAAB0ya7oLoHvmzZvXzE8//fRmfvLJJw/cY9as9l/d7bbbrpnvsMMOzfySSy4ZWAMMi8cee6yZz507d4oqmblWWmmlgdccccQRzfzQQw9t5rfddlsz/+QnP9nMH3rooWYOo33sYx+b7hIY4OUvf/m41zj77LMnoBJgzpw5A6/ZaaedJrWGc889t5n/4he/mNT9gT925ZVXNvN11llniipZeoPmIttvv30zHxkZaea/+tWvxlwTU8udvgAAAAAAHWLoCwAAAADQIYa+AAAAAAAdYugLAAAAANAhhr4AAAAAAB1i6AsAAAAA0CGGvgAAAAAAHWLoCwAAAADQIbOmuwCGz6abbtrMX//61zfzrbbaqpnPmjX+v5bXX399M//hD3847j1gWJx33nnTXcK0mzNnTjM/9NBDB64wsLIpAAAgAElEQVSx9957N/Nzzz23me+xxx4D9wAYi3POOWe6S4BO+P73vz/wmqc+9anj2uOKK65o5gcccMC41gdY2CqrrNLMR0ZGmnmttZmfddZZY66JqeVOXwAAAACADjH0BQAAAADoEENfAAAAAIAOMfQFAAAAAOgQQ18AAAAAgA4x9AUAAAAA6BBDXwAAAACADpk13QUw9Z7//Oc384MOOqiZv+51r2vm66233phrGqvf//73zXzu3LnNfGRkZCLLgUlVShlXvvvuuzfzQw45ZMw1zTTve9/7mvmHPvShZj579uyBe5x55pnNfP/99x+4BgAw86y11loDrxnv1w8nnXRSM3/ooYfGtT7Awi644ILpLoFp5k5fAAAAAIAOMfQFAAAAAOgQQ18AAAAAgA4x9AUAAAAA6BBDXwAAAACADjH0BQAAAADoEENfAAAAAIAOmTXdBTA266233sBr9tlnn2Z+0EEHNfMNNthgLCVNuKuvvnrgNUcffXQzP++88yaqHJh2tdZx5YP6xoknntjMv/KVrzTzJLnnnnua+dZbb93M3/jGNzbzzTbbrJk/4xnPaOa33nprM7/ggguaeZKcdNJJA68BmEillGa+4YYbNvMrrrhiIsuBoXXKKac08+WWm/x7oS6//PJJ3wNgtJ133nm6S2CaudMXAAAAAKBDDH0BAAAAADrE0BcAAAAAoEMMfQEAAAAAOsTQFwAAAACgQwx9AQAAAAA6xNAXAAAAAKBDZk13Acuaddddt5lvtNFGzfwzn/nMwD1e8IIXjKmmiXbllVc280984hPN/Nxzzx24x8jIyJhqgmXZ8ssv38zf9a53NfM99thj4B4PPPBAM3/e8543cI3xuPzyy5v5xRdf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JS95STPfZJNNxlrSmK2//vrN/OCDD570GmBZctdddzXzH/7wh8381a9+9USWA8xwG2+8cTM/4IADBq6x5557NvPllmvf2/D0pz+9mY+MjDTzWmsznwkG9dbPf/7zzfy9731vM3/ggQfGXBN01ezZs5v5xRdf3MzvvPPOZr7eeuuN6/kAXXTcccc183e+853N/IknnmjmF1544Zhrmknc6QsAAAAA0CGGvgAAAAAAHWLoCwAAAADQIYa+AAAAAAAdYugLAAAAANAhhr4AAAAAAB1i6AsAAAAA0CGzprsAJt4LXvCCZv7e9763me+7777NfJVVVmnmpZRm/pvf/KaZP/jgg808SV74whc287322quZn3TSSc38hhtuGFgD8Afz589v5rfccssUVQIMg2OPPbaZ77LLLlNUybJt//33b+Zf/vKXm/mPf/zjiSwHlmnrrbfeuPI777xzIssBGApbb711M19hhRWa+WWXXdbMv/71r4+5ppnEnb4AAAAAAB1i6AsAAAAA0CGGvgAAAAAAHWLoCwAAAADQIYa+AAAAAAAdYugLAAAAANAhhr4AAAAAAB0ya7oL4I/Nnj27mX/sYx8buMbee+/dzJ/ylKeMqaaxuvHGG5v5zjvv3MxXWGGFgXvccMMNzXzttdceVw6MzRprrNHMN9tssymqBBgGP/jBD5r5LrvsMu49fve73zXzL3/5y818ueXa90aMjIyMuabRttlmm4HXbL/99uPaAxgepZTpLgEYMtttt10z/+AHP9jM99lnn2Z+7733jrmmiTaoxk022aSZ33TTTc38/e9//5hrGibu9AUAAAAA6BBDXwAAAACADjH0BQAAAADoEENfAAAAAIAOMfQFAAAAAOgQQ18AAAAAgA4x9AUAAAAA6JBZ010Af+y1r31tM3/b2942RZUs3k033dTMX/GKVzTz3/zmN838uc997phrAqbXqquu2syf+cxnTur+W221VTO/4YYbmvktt9wykeUAA3zuc59r5t/61rfGvccTTzzRzO+8885x7zEeq6+++sBrrrvuumb+9Kc/fVw1DPpzvvrqq8e1PrDkaq3NfOWVV56iSoBh8cUvfrGZP+95z2vmG220UTO/7LLLxlzTRDv88MOb+VprrdXMDzzwwGZ+7bXXjrmmYeJOXwAAAACADjH0BQAAAADoEENfAAAAAIAOMfQFAAAAAOgQQ18AAAAAgA4x9AUAAAAA6BBDXwAAAACADpk13QXwx/bcc89J3+Pmm29u5ldddVUzP+yww5r5b37zm7GW9Ede+MIXjuv5wNS74447mvmpp57azI888shx7T/o+fPmzWvmn/nMZ8a1PzA2Tz75ZDMf7+cSw2DnnXceeM1Tn/rUSa3htttua+aPPfbYpO4PLLktt9yymV9xxRVTVAkwUzz88MPNvNbazFdeeeWJLGepzJkzp5k/61nPauYjIyP/v117C7Gy3v84/iwbt6ikaIpElJkSKWOlGGSJdZGl4iGKIY+llYqRZWClBGlqSEGSKJRSCREhHTxUaGloJWWXBlZSCpkyiRKakeNx1v/if7PbtL+Pa6+ZtWZ+6/W6fS+f5xfor/HjCntb+G+sJt/0BQAAAABIiNEXAAAAACAhRl8AAAAAgIQYfQEAAAAAEmL0BQAAAABIiNEXAAAAACAhRl8AAAAAgIQYfQEAAAAAElJX7QPwd7NmzQr77Nmzc5+xffv2sB84cCDsx44dy31Ha+rTp09V3w+0vGXLloV9yZIllTkIQIVMmjQp7Hk/82VZlnXu3LmljvOPnn/++VZ9PtSSCxcuhP2PP/4Ie/fu3cPev3//ks8EtG95f4caPHhw2H/88cewf/fddyWfqRRdu3bN/cyzzz4b9i5duoT922+/DfsHH3yQe4aU+aYvAAAAAEBCjL4AAAAAAAkx+gIAAAAAJMToCwAAAACQEKMvAAAAAEBCjL4AAAAAAAkx+gIAAAAAJKSu2gfg7xobG8O+ZMmSyhykioYPH17tIwAV1qFD/G+Qzc3NFToJwP+bOnVq2BcuXBj2AQMGhL1jx44ln6lUe/fuDfv58+db/QxQK06ePBn23bt3h33cuHEteRygjbv66qtzPzNr1qywX7hwIeyPP/542I8fP557hnKsXLky9zMNDQ1hz9vIbr/99pLOVGt80xcAAAAAICFGXwAAAACAhBh9AQAAAAASYvQFAAAAAEiI0RcAAAAAICFGXwAAAACAhBh9AQAAAAASUlftA9D2PPHEE2Hv2rVrq75/8ODBZT/jm2++CfuePXvKfgfQcpqbm8NeLBYrdBKgEq699tqwT58+PfcZd911Vwud5p+NGDEi7JW4l06dOhX2hQsXhn3r1q1hb2pqKvlMAEC++vr6sG/atCn3Gb169Qr76tWrw/7ll1/mvqMcCxYsCPuMGTPKfseLL75Y9jNqmW/6AgAAAAAkxOgLAAAAAJAQoy8AAAAAQEKMvgAAAAAACTH6AgAAAAAkxOgLAAAAAJAQoy8AAAAAQELqqn0AStOlS5fczwwaNCjsixcvDvvYsWNLOtN/6tAh/reE5ubmsp6fZVnW2NgY9pkzZ4b94sWLZZ8BAPhn9fX1Yf/oo4/Cfs0117Tkcdqt3bt3h33dunUVOglQbVdccUW1jwA1pa4unsumTZsW9jfffDPsebtJluVvJ8OHDw/7okWLwr5y5cqw9+zZM+wNDQ1hLxQKYc+yLHv77bfDvnbt2txn8N/5pi8AAAAAQEKMvgAAAAAACTH6AgAAAAAkxOgLAAAAAJAQoy8AAAAAQEKMvgAAAAAACTH6AgAAAAAkpK7aB6g1HTt2DPuQIUPC/uGHH+a+48orrwx7U1NT2BsbG8O+Z8+esI8ePTrsXbp0CfulqKuLf+ved999YV+1alXYz507V/KZAIBLUygUyuqV0KFD/N2I5ubmVj/DuHHjwj5mzJiwb9u2rSWPA1TRhAkTqn0EqCmTJk0K+xtvvBH2YrEY9kv5OeLAgQNhHzZsWFl94sSJYb/qqqvCnrc9HT9+POxZlmUPP/xw7mf43/mmLwAAAABAQoy+AAAAAAAJMfoCAAAAACTE6AsAAAAAkBCjLwAAAABAQoy+AAAAAAAJMfoCAAAAACSkrtoHSM2//vWvsI8ePTrsGzduLPsML7zwQth37twZ9q+//jrsPXv2LOv59fX1Yb8UvXv3DvuKFSvC/uuvv4Z98+bNYT979mzYgdJ06BD/G2Rzc3NZzx85cmTY16xZU9bzgb/bt29f2O+8886wT5s2Lfcdn332WdjPnDmT+4zW9Mgjj4R93rx5FToJ0Bbs2rUr7OPGjavQSYAsy7IHHngg7OvXrw/7+fPnw37y5MmwT5kyJexZlmUnTpwI+yuvvBL2O+64I+zDhg0Le6FQCHuxWAx7r169wp5lWXb48OGw5/3MePDgwdx31DLf9AUAAAAASIjRFwAAAAAgIUZfAAAAAICEGH0BAAAAABJi9AUAAAAASIjRFwAAAAAgIUZfAAAAAICEFIrFYuVeVihU7mWtpGPHjmFfunRp2J9++umy3r9t27bcz0yfPj3sJ0+eDHvv3r3DvnXr1rAPHTo07OfOnQv7yy+/HPYsy7L6+vqwT5w4MfcZkc8//zzsL730UthPnDhR1vuzLMv27t1b9jMixWKx0KovaCNSuHdqwcWLF8Pe2v+vuvHGG3M/88MPP7TqGWqBe4da0r1797D//vvvZb9j/PjxYb+UnxtTVwv3jjunfbj//vvD/v7774e9qakp7IMGDQr7oUOHwk7LqIU7J8vSuHd27twZ9r59+4Z9+fLlYV+/fn3JZypV3p/7tWvXhn348OFhLxTi384t8Xe0d999N+wPPvhg2e9IXXTv+KYvAAAAAEBCjL4AAAAAAAkx+gIAAAAAJMToCwAAAACQEKMvAAAAAEBCjL4AAAAAAAkx+gIAAAAAJMToCwAAAACQkLpqH6Ctueyyy8K+bNmysC9YsCDsf/31V9gXLlwY9g0bNoQ9y7Ls5MmTYR82bFjY16xZE/YhQ4aE/eeffw773Llzw75r166wZ1mWdevWLey33XZb2KdOnRr2CRMmhH3Hjh1hz3P48OHcz/Tr16+sd0B78vrrr4d9zpw5rfr+2bNn535m/vz5rXoGIC333HNPtY8AtCEXLlwo69cXCoWwd+rUqaznQ63ZsmVL2Ddu3Bj2S/k7fWvr1atX2Ovr68t6/uTJk8O+b9++sp6fZVl25MiRsp/Bf+ebvgAAAAAACTH6AgAAAAAkxOgLAAAAAJAQoy8AAAAAQEKMvgAAAAAACTH6AgAAAAAkxOgLAAAAAJCQumofoK2ZPXt22BcsWBD206dPh33OnDlh3759e9hvvfXWsGdZls2cOTPsY8aMCXvnzp3DvnTp0rCvX78+7IcPHw77pTh16lTYP/3007L65MmTwz5lypSw53nqqafK+vWQmv3791f7CMC/6dixY9jvvvvusO/cuTPsTU1NJZ+prcn7eWvVqlUVOgnQHmzZsiXseT8L3XDDDWGfP39+2B977LGwQ61pD/+f7t69e9gbGhrC3q1bt7AfPHgw7O+9917Yaft80xcAAAAAICFGXwAAAACAhBh9AQAAAAASYvQFAAAAAEiI0RcAAAAAICFGXwAAAACAhBh9AQAAAAASUigWi5V7WaFQuZf9j3777bew9+7dO+xnz54N+/79+8PetWvXsA8YMCDsLWHJkiVhX7FiRdgvXrzYgqehtRSLxUK1z1AJ7eHeId9PP/0U9v79+5f1/A4d8v8NNO/+PXjwYFlnqAXunbZjxIgRYX/uuefCPmrUqLD369cv7IcPHw57JfTs2TPsY8eODfvq1avDfvnll5d8pv/U1NQU9gkTJoR9165dZZ+hvauFe6c93Dnke/XVV8M+c+bMsPfp0yfsZ86cKflMlK4W7pwsc+9UyqJFi8K+bNmysB8/fjzst9xyS9iPHDkSdtqG6N7xTV8AAAAAgIQYfQEAAAAAEmL0BQAAAABIiNEXAAAAACAhRl8AAAAAgIQYfQEAAAAAEmL0BQAAAABISF21D9DWHD16NOy9e/cOe6dOncJ+0003lXymf7d169bcz3z11Vdh37x5c9h/+eWXsF+8eDH3DAAt6fvvvw/7ddddV9bzm5uby/r10N6sWbMm7PX19WU9/5lnngn7n3/+WdbzW8KoUaPCPnTo0LAXi8Wy3v/FF1/kfua1114L+65du8o6A9B+5N05586dq9BJgJbQt2/f3M88+uijYc+7F3GeAgsAAARWSURBVNatWxf2I0eO5J6B9s03fQEAAAAAEmL0BQAAAABIiNEXAAAAACAhRl8AAAAAgIQYfQEAAAAAEmL0BQAAAABIiNEXAAAAACAhddU+QFszcuTIsN97771hHzp0aNiPHTsW9rfeeivsJ06cCHuWZdm5c+dyPwPQnqxbty7s48ePr9BJgEsxd+7cah+h1eX9TPfxxx+H/cknn8x9x5kzZ0o6E5Cubt26hX3ixIlh37RpU0seByjTjh07cj/Tt2/fsL/zzjthX7x4cUlnIj2+6QsAAAAAkBCjLwAAAABAQoy+AAAAAAAJMfoCAAAAACTE6AsAAAAAkBCjLwAAAABAQoy+AAAAAAAJKRSLxcq9rFCo3MuAULFYLFT7DJXg3klD3759w/7JJ5+EfeDAgWEvFPL/OFx//fVhP3jwYO4zap17p+24+eabwz5v3rywP/TQQy15nFaR92fy9OnTYd+9e3fY161bF/Z9+/aFncqohXunPdw55GtsbAx7jx49wj5kyJCw79+/v+QzUbpauHOyzL3TEhYtWpT7mWXLloW9oaEh7Js2bSrpTLRP0b3jm74AAAAAAAkx+gIAAAAAJMToCwAAAACQEKMvAAAAAEBCjL4AAAAAAAkx+gIAAAAAJMToCwAAAACQkEKxWKzcywqFyr0MCBWLxUK1z1AJ7h1oO9w77UenTp3CPmPGjLAvX7487D169Aj75s2bw55lWbZjx46wb9myJexHjx7NfQftXy3cOyncOWTZhg0bwj5w4MCwT5gwIeyHDh0q+UyUrhbunCxz70BbEt07vukLAAAAAJAQoy8AAAAAQEKMvgAAAAAACTH6AgAAAAAkxOgLAAAAAJAQoy8AAAAAQEKMvgAAAAAACTH6AgAAAAAkpFAsFiv3skKhci8DQsVisVDtM1SCewfaDvcOUGm1cO+4c6DtqIU7J8vcO9CWRPeOb/oCAAAAACTE6AsAAAAAkBCjLwAAAABAQoy+AAAAAAAJMfoCAAAAACTE6AsAAAAAkBCjLwAAAABAQoy+AAAAAAAJMfoCAAAAACTE6AsAAAAAkBCjLwAAAABAQoy+AAAAAAAJMfoCAAAAACTE6AsAAAAAkBCjLwAAAABAQoy+AAAAAAAJMfoCAAAAACTE6AsAAAAAkBCjLwAAAABAQoy+AAAAAAAJMfoCAAAAACTE6AsAAAAAkBCjLwAAAABAQgrFYrHaZwAAAAAAoIX4pi8AAAAAQEKMvgAAAAAACTH6AgAAAAAkxOgLAAAAAJAQoy8AAAAAQEKMvgAAAAAACTH6AgAAAAAkxOgLAAAAAJAQoy8AAAAAQEKMvgAAAAAACTH6AgAAAAAkxOgLAAAAAJAQoy8AAAAAQEKMvgAAAAAACTH6AgAAAAAkxOgLAAAAAJAQoy8AAAAAQEKMvgAAAAAACTH6AgAAAAAkxOgLAAAAAJAQoy8AAAAAQEKMvgAAAAAACTH6AgAAAAAk5P8A9s/YWpe/qdcAAAAASUVORK5CYII=\n",
      "text/plain": [
       "<Figure size 1440x576 with 10 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "fig, axes = plt.subplots(ncols=5, nrows=2, figsize=(20, 8))\n",
    "axes = axes.flatten()\n",
    "for i, ax in enumerate(axes):\n",
    "    ax.imshow(X_train[i], cmap='gray')\n",
    "    ax.axis('off')\n",
    "    ax.set_title('Digit: {}'.format(y_train[i]), fontsize=16)\n",
    "fig.suptitle('First 10 Digits', fontsize=20)\n",
    "fig.tight_layout()\n",
    "fig.subplots_adjust(top=.9)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Show random image in detail"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2017-06-02T19:25:22.781942Z",
     "start_time": "2017-06-02T19:25:20.223390Z"
    }
   },
   "outputs": [
    {
     "data": {
      "image/png": "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Qd47XL1pmua46yxf/JiIiIiIiDiSaZrG9ZYp0eBRVBo8RERERETKnsIMHo7/y+UiIiIiIuL9NHiIiIiIiIjlNHiIiIiIiIjlNHiIiIiIiIjlNHiIiIiIiIjlNHiIiIiIiIjlNHiIiIiIiIjlNHiIiIiIiIjlNHiIiIiIiIjlNHiIiIiIiIjlNHiIiIiIiIjlNHiIiIiIiIjlNHiIiIiIiIjlNHiIiIiIiIjlNHiIiIiIiIjlNHiIiIiIiIjlNHiIiIiIiIjlHD94REVFkZ6eTmZmJlOmTFHL4S27e2qp5ZSeWt7VsrunllpO6anlXS27e5a3TNO07QKYRb2kpKSYMTExJmAmJSWZsbGxRV6HWva1yvK2qeVdrbK8bWp5X08ttZzSU8u7Wt60bYWZBRy9xyMwMJCAgABSUlIAmDdvHp07d1bLoS27e2qp5ZSeWt7VsrunllpO6anlXS27e3a0HD14uFwu3G6357rb7cblcqnl0JbdPbXUckpPLe9q2d1TSy2n9NTyrpbdPTtajh48RERERESkbHD04JGVlUVwcLDnenBwMFlZWWo5tGV3Ty21nNJTy7tadvfUUsspPbW8q2V3z46WoweP7OxscnJyiImJASA+Pp7Fixer5dCW3T211HJKTy3vatndU0stp/TU8q6W3T1bWk5/V6vo6GgzIyPD3LZtmzlt2jRL3zVALe/rqaWWU3pqeVerLG+bWt7VKsvbppb39UrSKswsYFwYCGxhGIZ9MRERERERsYVpmsb1lnH0oVYiIiIiIlI2aPAQERERERHLafAQERERERHLafAQERERERHLafAQERERERHLafAQERERERHLafAQERERERHLafAQERERERHLafAQERERERHLafAQERERERHLafAQERERERHLafAQERERERHLafAQERERERHLafAQERERERHLafAQERERERHLafAQERERERHLafAQERERERHLafAQERERERHLOX7wiIqKIj09nczMTKZMmaKWw1t299RSyyk9tbyrZXdPLbWc0lPLu1p29yxvmaZp2wUwi3pJSUkxY2JiTMBMSkoyY2Nji7wOtexrleVtU8u7WmV529Tyvp5aajmlp5Z3tbxp2wozCzh6j0dgYCABAQGkpKQAMG/ePDp37qyWQ1t299RSyyk9tbyrZXdPLbWc0lPLu1p29+xoOXrwcLlcuN1uz3W3243L5VLLoS27e2qp5ZSeWt7VsrunllpO6anlXS27e3a0HD14iIiIiIhI2eDowSMrK4vg4GDP9eDgYLKystRyaMvunlpqOaWnlne17O6ppZZTemp5V8vunh0tRw8e2dnZ5OTkEBMTA0B8fDyLFy9Wy6Etu3tqqeWUnlre1bK7p5ZaTump5V0tu3u2tJz+rlbR0dFmRkaGuW3bNnPatGmWvmuAWt7XU0stp/TU8q5WWd42tbyrVZa3TS3v65WkVZhZwLgwENjCMAz7YiIiIiIiYgvTNI3rLePoQ61ERERERKRs0OAhIiIiIiKW0+AhIiIiIiKW0+AhIiIiIiKW0+AhIiIiIiKW0+AhIiIiIiKW0+AhIiIiIiKW0+AhIiIiIiKW0+AhIiIiIiKW0+AhIiIiIiKW0+AhIiIiIiKW0+AhIiIiIiKW0+AhIiIiIiKW0+AhIiIiIiKW0+AhIiIiIiKW0+AhIiIiIiKW0+AhIiIiIiKW0+AhIiIiIiKWc/zgERUVRXp6OpmZmUyZMkUth7fs7qmlllN6anlXy+6eWmo5paeWd7Xs7lneMk3TtgtgFvWSkpJixsTEmICZlJRkxsbGFnkdatnXKsvbppZ3tcrytqnlfT211HJKTy3vannTthVmFnD0Ho/AwEACAgJISUkBYN68eXTu3Fkth7bs7qmlllN6anlXy+6eWmo5paeWd7Xs7tnRcvTg4XK5cLvdnututxuXy6WWQ1t299RSyyk9tbyrZXdPLbWc0lPLu1p29+xoOXrwEBERERGRssHRg0dWVhbBwcGe68HBwWRlZanl0JbdPbXUckpPLe9q2d1TSy2n9NTyrpbdPTtajh48srOzycnJISYmBoD4+HgWL16slkNbdvfUUsspPbW8q2V3Ty21nNJTy7tadvdsaTn9Xa2io6PNjIwMc9u2bea0adMsfdcAtbyvp5ZaTump5V2tsrxtanlXqyxvm1re1ytJqzCzgHFhILCFYRj2xURERERExBamaRrXW8bRh1qJiIiIiEjZoMFDREREREQsp8FDREREREQsp8FDREREREQsp8FDREREREQsp8FDREREREQsp8FDREREREQsp8FDREREREQsp8FDREREREQsp8FDREREREQsp8FDREREREQsp8FDREREREQsp8FDREREREQsp8FDREREREQsp8FDREREREQsp8FDREREREQsp8FDREREREQsp8FDREREREQsp8FDREREREQs5/jBIyoqivT0dDIzM5kyZYpaDm/Z3VNLLaf01PKult09tdRySk8t72rZ3bO8ZZqmbRfALOolJSXFjImJMQEzKSnJjI2NLfI61LKvVZa3TS3vapXlbVPL+3pqqeWUnlre1fKmbSvMLODoPR6BgYEEBASQkpICwLx58+jcubNaDm3Z3VNLLaf01PKult09tdRySk8t72rZ3bOj5ejBw+Vy4Xa7Pdfdbjcul0sth7bs7qmlllN6anlXy+6eWmo5paeWd7Xs7tnRcvTgISIiIiIiZYOjB4+srCyCg4M914ODg8nKylLLoS27e2qp5ZSeWt7VsrunllpO6anlXS27e3a0HD14ZGdnk5OTQ0xMDADx8fEsXrxYLYe27O6ppZZTemp5V8vunlpqOaWnlne17O7Z0nL6u1pFR0ebGRkZ5rZt28xp06ZZ+q4BanlfTy21nNJTy7taZXnb1PKuVlneNrW8r1eSVmFmAePCQGALwzDsi4mIiIiIiC1M0zSut4yjD7USEREREZGyQYOHiIiIiIhYToOHiIiIiIhYToOHiIiIiIhYToOHiIiIiIhYToOHiIiIiIhYToOHiIiIiIhYToOHiIiIiIhYzvdG3wERkd+yPn362NobNmyYba369evb1vLxse/3aAMHDrStBZCYmGhrT0TEKtrjISIiIiIiltPgISIiIiIiltPgISIiIiIiltPgISIiIiIiltPgISIiIiIiltPgISIiIiIiltPgISIiIiIiltPgISIiIiIiltPgISIiIiIilnP84BEVFUV6ejqZmZlMmTJFLYe37O6ppZZTela22rVrx+jRoxk9ejT3338/AMHBwQwfPpxRo0YxaNAgKlWqVKx17927l169ehEbG8tDDz3E3LlzAUhOTuahhx6iQYMGZGRkeJY/ffo0Q4cOpUOHDnTq1ImUlJRCt3bv3k27du1o0qQJ4eHhTJ06FYDRo0dTp04doqKiiIqKIikpCYC1a9d6bouMjGThwoVFat13333ceeedhIWFeR6TUaNG4XK5iIiIICIiwtPauXMnlStX9tzev3//QrcAvvzyS9566y0WLFjgue3kyZN88sknvPvuu3zyySecOnXK87GsrCw++OADFixYwKJFi4rUup6y8rz/rbTs7qnlXS27e1a3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Gj9+PO+99x5paWkYhsHtt9/OP//5T4KCgvjoo4946aWXPK3Ro0fTqVOnK7YGDhx42W0rV65kz549nDx5ksqVK3PXXXdRr149VqxYQW5uLv7+/jzwwAOetz3+4YcfPENJ48aNr3leTWJi4lU/diXe8LxX68b11PKult29krRM07zuO4CUZPCoT95eDsg7ZOtd0zTHXedzihcTESmjCjN4lKZLBw8rlXSPQVFcOnhY6UqDh5WKOniIiNwIhRk8in2Oh2ma24Gr/4pGRERERETkAke/na6IiIiIiJQNGjxERERERMRyGjxERERERMRyGjxERERERMRyGjxERERERMRyGjxERERERMRyGjxERERERMRyxf4DgsWK6Q8Iikgx5f/FZzs0b97cttayZctsawH4+fnZ2rNL/l9dt0Nubq5tLYBHHnnEtlZycrJtLREpWwrzBwS1x0NERERERCynwUNERERERCynwUNERERERCynwUNERERERCynwUNERERERCynwUNERERERCynwUNERERERCynwUNERERERCynwUNERERERCzn+MEjKiqK9PR0MjMzmTJliloOb9ndU0uta+nRowfr1q1j7dq1LF68mFtuuaXU1u3v78+YMWN4++23mT9/PmFhYVStWpXJkyfz7rvvMnnyZPz9/Yu1brfbTceOHWnRogUxMTEkJiYW+Pi0adO46aabOHDgAABbt27l/vvvp0aNGkydOrVIrd27d9OuXTvCw8Np2rSp5/NHjx7NbbfdRnR0NNHR0SQlJQGwcuVKWrRoQUREBC1atOCLL75wdKtJkyaEh4cXaNWpU4eoqCiioqI8rbVr13pui4yMZOHChYVugb2P2cVcLhfTpk3zXD788EP++Mc/8thjjzFjxgymTZvG2LFjqV69erEb11JWXz/0fVMtp7Ts7lneMk3TtgtgFvWSkpJixsTEmICZlJRkxsbGFnkdatnXKsvbptaNbVWqVKlIFz8/P/PXX381XS6XWalSJfP11183x4wZU6jPbdWq1XUvSUlJ5muvvWa2atXKbNu2rRkbG2u+8847ZmJiotmqVSszMTHRfPvtt6+7niNHjlx2+emnn8yvvvrKPHLkiOl2u82QkBAzJSXFPHLkiLlp0ybz97//vVmnTh1z+/bt5pEjR8xt27aZX3zxhfnss8+aY8aMueI68y9nz54tcNm9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IiIiImI5DR4iIiIiImI5DR4iIiIiImI53xt9B0RECmPo0KG2tUaOHGlby25bt261rTVp0iTbWnPmzLGtZfcfYbzpppts7YmIWEV7PERERERExHIaPERERERExHIaPERERERExHIaPERERERExHIaPERERERExHIaPERERERExHIaPERERERExHIaPERERERExHIaPERERERExHKOHzyioqJIT08nMzOTKVOmqOXwlt09tX7brcWLFzNp0iRmzpzpuW3FihVMnz6dxMRE3n//fU6ePAlAeno6s2bN8lxGjx5NdnZ2oVu7d++mXbt2hIeH07RpU6ZOnQrA6NGjue2224iOjiY6OpqkpCQAVq5cSYsWLYiIiKBFixZ88cUXjmzt3buXJ554go4dO9KpUyfmz58PwPLly+nUqRNhYWFs3Ljxss/bs2cP0dHRvPnmm4VuXer+++/nlVdeYcyYMfzhD38AoH///owaNYpRo0YxceJERo0aVax1538NmzRpQnh4eIGvYZ06dYiKiiIqKsrzNVy7dq3ntsjISBYuXFisnh2P2aUeeughJk2axMSJExk0aBDly5cnLCyM8ePH8+qrr/Lyyy9Tq1atYq//Wrz59cMpLbt7anlXy+6e1S3HDx6JiYn069eP0NBQQkNDiY2NVcvBLbt7av22WxEREfTq1avAbSEhIQwcOJABAwZQvXp1vv76awCaNm1K//796d+/P126dKFatWoEBgYWuuXr68ukSZPIyMjgm2++ITExkc2bNwPwzDPPsH79etavX0/79u0BuPXWW1m0aBFpaWm8+eabPPHEE45tDRkyhKVLl7JgwQLeffddtm3bRmhoKFOnTqV58+ZX/LyJEydy7733FrpzKZfLRevWrRk7diwvv/wyzZo1o2bNmsyaNcszeORvZ3Hkfw03btzImjVrmDlzpudrmJCQQGpqKqmpqZ6vYZMmTVi7di2pqakkJSUxYMAAzp49W+SeHY/ZxapVq0ZsbCwjRoxgyJAh+Pj4cPfdd9OnTx+mT5/O8OHDWbNmDV26dCnW+q/Hm18/nNKyu6eWd7Xs7lndcvTgERgYSEBAACkpKQDMmzePzp07q+XQlt09tdSqW7culStXLnBbSEgIPj55L23BwcEcPXr0ss/buHEjYWFhRWoFBQURFRUFQNWqVWnUqBFZWVlXXT4yMpLatWsDEBYWxokTJzh16pTjWjVq1ODOO+8EwM/Pj/r167Nv3z5CQkKoV6/eFT/ns88+w+VycccddxSqcSVBQUHs2LGD06dPc/78eX766SfPNue76667PM+X4qy/KF/DKlWq4OvrC8DJkycxDMPSXkkes0uVK1eOChUq4OPjQ4UKFTh06BCmaXr+36hSpQqHDh0q1rqvxdtfP5zQsrunlne17O7Z0XL04OFyuXC73Z7rbrcbl8ullkNbdvfUUut60tLSrvjD8aZNmwgPDy/2enfu3ElaWhoxMTEAzJw5k8jISPr27XvFH/A+/vhjIiMjqVixoqNbWVlZ/PjjjzRt2vSqyxw7dow33niDgQMHFnn9l7ZCQ0Px8/OjQoUKhIeHU716dc/HGzRoQE5ODvv27StRBy7/Gs6YMYOIiAj69OlT4GuYkpJCeHg4zZo1Y+bMmZ5BpKQ9Kx+zQ4cOsXTpUs/hhcePHycjI4PZs2czdOhQpk+fTqtWrViyZEmxtuVayurrh75vquWUlt09O1qOHjxERIrrv//9Lz4+PpcNGG63m/Lly1OzZs1irTc3N5cePXowefJkAgIC6N+/P1u3bmX9+vUEBgby/PPPF1h+06ZNDB8+nMTEREe3jh07xjPPPMPw4cPx9/e/6nIzZswgPj4ePz+/IjcutnfvXpKTk3n22WcZPHgwu3fvxjRNz8djYmKKvbfjYrm5uXTv3r3A1zAzM5PU1FSCgoJ47rnnCjQzMjJISUlhwoQJnvODitqz6zGDvL1UzZs35+mnn2bgwIFUrFiRVq1a0b59eyZMmMBTTz3FV199ddkhiSIiN4KjB4+srCyCg4M914ODg6+561qtG9uyu6eWWleTlpZGZmYmXbt2veyQmY0bN9KkSZNirffMmTN0796dRx991HPMfK1atShXrhw+Pj707duXdevWeZZ3u91069aNt956i5CQEEe3EhIS6Nixo+ck76tJT0/n9ddf5/7772f+/PnMnj2bd955p0i9fF9//TWvvPIKEyZM4NixY56T/X18fIiKimLt2rXFWm++M2fO0K1bN3r27EnXrl2Ba38N8zVu3Bh/f/8rnlR/vZ5dj1m+Jk2asG/fPo4ePcq5c+dYt24dDRo0oG7duvz8888AfPvttzRo0KBY67+Wsvr6oe+bajmlZXfPjpajB4/s7GxycnI8u6vj4+NZvHixWg5t2d1TS60r2bZtG9988w2PPPII5cuXL/Ax0zTZvHlzsQYP0zTp168fjRs3ZvDgwZ7b9+7d6/nvRYsWec4dOXz4MHFxcYwfP57f/e53jm6NHDmS+vXrF+oE57fffpvPPvuMzz77jMcee4y//OUv/OlPfypSM1/VqlUBqF69OtHR0Xz33XcA3HnnnWRnZ5fovATTNOnbt2+hv4Y7duzwnEy+a9cutmzZwu23316knl2P2cX+97//ERoaSoUKFYC8QSQrK4sqVap43jwhPDzckh9UyuLrh90tu3tqeVfL7p4dreIdwGqjgQMHMnfuXCpXrkxycjLJyclqObhld0+t33bro48+YufOnRw/fpzJkyfTtm1bVq9ezblz5zxvCxscHEzHjh2BvB8oAwICqFatWpFb33zzDW+//Tbh4eFER0cDMGbMGN5//302bNiAYRjUrVvXc8jMjBkz2LZtG2PHjmXs2LEAJCcnF+oQLztbqampLFmyhAYNGnh+S5+QkMCZM2cYN24cBw8eZMCAATRq1Ih//etfRfyqXduTTz6Jv78/586d4+233+bEiRMAtGjRosSHWV38Ncw/6Xvs2LEsWLCgwNdw1qxZAKxevZqJEydSvnx5fHx8mD59OrfeemuxelY/Zhf7+eefSUlJYfz48Zw/f56dO3fy+eefc+DAAQYPHoxpmhw7dox//vOfRVpvYXnz64dTWnb31PKult09q1vGxcfUWs0wDPtiIlKmvPzyy7a1Ro4caVvLblu3brWtNWnSJNtac+bMsa1l5/dNwNbzMxYsWGBbS0TKFtM0r/t2gI4+1EpERERERMoGDR4iIiIiImI5DR4iIiIiImI5DR4iIiIiImI5DR4iIiIiImI5DR4iIiIiImI5DR4iIiIiImI5DR4iIiIiImI5DR4iIiIiImI53xt9B0TEe91xxx22tXr06GFby06bNm2ytRcXF2dba8iQIba1RETE+bTHQ0RERERELKfBQ0RERERELKfBQ0RERERELKfBQ0RERERELKfBQ0RERERELKfBQ0RERERELKfBQ0RERERELKfBQ0RERERELOf4wSMqKor09HQyMzOZMmWKWg5v2d1Ty9mtChUq8OGHH7JkyRKSkpJ4+umnPR8bPHgwK1asYPny5cTHxxdr/Xv37uWJJ56gU6dOxMXFMX/+fAA+/fRT4uLiaNKkCRs3bvQsn56e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7c033yQzM5Pc3FwCAgLo0KED99xzj+fjI0eOZOjQofj7+7N9+3bPWyQHBQXRq1cvqlSpcsVW//79C1xfvXo1bdq0KfB4jR07lgULFhR4vGbNmkVQUBDz589n4sSJlC9fHh8fH1588cWrnlR5pe+bVj0/gOseJtWtWzdatmzJ+fPn2blzJ7NnzyYiIoLu3btjmibHjh3jn//8J/v27bvmegAWLFhw3WUu5i2vVU5u2d1Ty7tadvdK0jJN87rHwjp+8BAR57re4FGarPyN0qWuNHhY5UqDh5WuNXiUtisNHla5dPCwkp3fN+H6g0dpKurgISKSrzCDh6MPtRIRERERkbJBg4eIiIiIiFhOg4eIiIiIiFhOg4eIiIiIiFhOg4eIiIiIiFhOg4eIiIiIiFhOg4eIiIiIiFhOg4eIiIiIiFhOg4eIiIiIiFjO90bfAREpXXb+NfFPPvnEtlZwcLBtrWXLltnWGjhwoG0tgKpVq9rW+tOf/mRby04HDx60tbdnzx5beyIiVtEeDxERERERsZwGDxERERERsZwGDxERERERsZwGDxERERERsZwGDxERERERsZwGDxERERERsZwGDxERERERsZwGDxERERERsZzjB4+oqCjS09PJzMxkypQpajm8ZXdPraKpUKECH374IUuWLCEpKYmnn37a87HBgwezYsUKli9fTnx8fLHWv3fvXh5//HE6duxIx44dmTdvHgDLly+nY8eO3HnnnWzcuNGzfFZWFhEREXTp0oUuXbowatSoIvXcbjft27enefPm3HXXXcycObPAx6dOnUrVqlX53//+B8DSpUtp2bIl99xzD61bt2bNmjWFbk2dOpX4+HgGDRrkuW3ixIkkJCSQkJBAv379SEhIAGDVqlWe2xMSEujcuTPbt28v0rblCwoK4oMPPuCLL77g888/p0+fPgDMnDmTTz/9lE8//ZRvv/2WTz/9tFjrvxIfHx8++ugjEhMTAXC5XCxYsIDly5czefJkypcvX6z1ut1uOnbsSExMDC1btvSsP9+0adO4+eabOXDgAACmaTJkyBAiIyO55557SEtLK3Rr9+7dtGvXjiZNmhAeHs7UqVMBGD16NHXq1CEqKoqoqCiSkpIAWLt2ree2yMhIFi5cWKRty8rKokuXLrRq1Yp7772X2bNnA/Daa6/Rpk0b7rvvPrp37052dnaBz/vh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33//jaCgIOTn52PEiBFo27Yt1qxZg6NHj2Lp0qUwMzODQqHArFmzUK9ePZ17f/zxBzZu3AgHBwd07NgRADBz5kzpSfLjtm/fjo0bN8LMzAwvvPACIiIidD6JeNGiRUhOTkZBQQE++ugj+Pv7o0ePHk/cq3Hy5Ek0bNhQ5yfKT/Laa6/B19cXp06dkk7wDg4Oxr59++Dj44PIyMgKLV8XixcvxuLFizF27FicOnWqxInn+jhy5Ai+//57tGvXTtpDNGPGjCfuGevZsyf27t0LtVqNWrVqYcWKFTq3Dh06hG+++QYqlUo6yXzOnDnYtGkTTpw4AYVCgebNm2PlypUAHpyLs2DBApiZmUGpVGL58uV6nfSt1Wrxww8/wN7eHm+88QYAYOrUqfj222+Rnp4OhUKBpk2bYuHChTovU1dLlizBtGnTYGZmhosXL2L+/PlYtWoVatSogcWLFwN4cB5SSEhIpberw3bx327J3WOrarXk7hm6pXj46p8cFAqFfDGi59TDV1TlUFmH+OhCnz0hFVXeV/TLY9SoUbK1AJS4ypKhHTlyRLaWnOv18H1G5OLr6ytb67fffpOtRUTVixDima/kGfWhVkREREREVD1w4EFERERERAbHgQcRERERERkcBx5ERERERGRwHHgQEREREZHBceBBREREREQGx4EHEREREREZHAceRERERERkcBx4EBERERGRwZn+298AEVUuIYRsrdu3b8vWSkhIkK319ttvy9Zq2rSpbC0AmDhxomytOnXqyNaSU0xMjKw9vps4EVUX3ONBREREREQGx4EHEREREREZHAceRERERERkcBx4EBERERGRwXHgQUREREREBseBBxERERERGRwHHkREREREZHAceBARERERkcFx4EFERERERAZn9AMPFxcXJCYmIjU1FUuWLGHLyFty99jST40aNbBlyxbs3LkT0dHR+OSTTwAAwcHB2L9/P3bs2IEdO3bA3t6+XMvPy8vDsGHD4OvrCz8/P3z33XcAgL/++gujRo1C3759MWrUKBQUFAAAjh49is6dO8Pf3x/+/v74+uuv9erNmzcP3t7eGDhwoDQtLS0NI0aMwKBBg/D555/j1q1bAIDc3Fx069YNH374IT788EMsWrSoXOv4JIb6P7O2tsamTZvw66+/4pdffsFHH30EALC3t8e2bdvw888/Y926deV+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NMHBgwfRuHFj9OrVC5s2bYIQAnFxcbC0tISVlZXOLbkei2V59dVXpRP1c3NzUVhYCAsLCwBAcXExjhw5gtdff73cy/+38e8mW8bSkrsnR0tRkT/EescUCr1jrq6uiIiIQM2aNREdHY0xY8YY4ltjq4r22Hp+Wg9fHX+ad999F506dUJxcTHOnTuH0NBQbNy4EVeuXMGdO3cAAEeOHMEPP/zw1OWsXbu21LQjR46gd+/eaNeunXR8/PTp07FhwwakpaVBqVSiadOmWLx4sXS8/ujRo3Hp0iUIITBu3DgMGDCg1HIfPmF7VExMDN544w04OjpKrTlz5mDTpk04ceIEFAoFWrRogdDQUOlV8tatW6OgoAB///036tWrh6ioKLRr167Ush8/aTomJgZdu3aFSqWSWrNnz8b3338vtZo3b46wsDBYW1sjKCgIwcHB0pNaAIiOjsZLL7301J+poVtlrVeXLl1KtB7/GTZv3hwrV66EtbU1NmzYgAULFsDMzAxKpRLTpk174kmVj766/9Aff/yBXr16lXh8zJgxAz179pTmUalUOHDgABo0aAAhBCZOnIhffvkFtWrVwooVK554edji4uISnxvqsQgAe/bsKfH50qVLcerUKdy4cQN169aFr68vPD09sXLlSmRmZsLU1BTvvfceHB0dATy46tTGjRsxe/bsMpf/KI1G89T7w8PD4enpiQYNGuDy5csICgrCtWvXsGjRIjRs2BB//fUXEhMTdTr59datW8+c51H8u8mWsbTk7lWkJYR45lU5jH7gQUQE6DbwqCxlDTwMpayBhyHpe7WmqkLO9Spr4GFIjw88DOnxgYchPWvgUZn0HXgQkf50GXgY9aFWRERERERUPXDgQUREREREBseBBxERERERGRwHHkREREREZHAceBARERERkcFx4EFERERERAbHgQcRERERERkcBx5ERERERGRwHHgQEREREZHB8Z3LiajcfH19ZWuFhYXJ1nrxxRdla1HlkPOdy+X8u1mdRUREyNYaP368bC2539meyFjwncuJiIiIiMgocOBBREREREQGx4EHEREREREZHAceRERERERkcBx4EBERERGRwXHgQUREREREBseBBxERERERGRwHHkREREREZHBGP/BwcXFBYmIiUlNTsWTJEraMvCV3jy3jb7311lsICQnB4sWL8cknn8DMzEy6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RERERAbHgQcRERERERkcBx5ERERERGRwHHgQEREREZHBceBBREREREQGx4EHEREREREZHAceRERERERkcM98A0Eiqlr27Nnz/+zdf3zN9f//8duZ1TLbVH7sJxLzGTO2nZreId54a34kNGq9vfcuTeQb8hFR9E5+hSLEokL0KfK7snn79abk3Wia39mssM2WCMvPt/H8/uHtXMzPzXZeztb9ermcSzuv89rztpfOjj32OuewrLVx40bLWjVq1LCsZaXdu3db2jt//rylPSldjDG3+0twirJ6XCKljc54iIiIiIiI02nwEBERERERp9PgISIiIiIiTqfBQ0REREREnE6Dh4iIiIiIOJ0GDxERERERcToNHiIiIiIi4nQaPERERERExOk0eIiIiIiIiNO5/OARGRnJtm3bSE9PZ9KkSWq5eMvqnlqu3Zo6dSoZGRl89913jm1Dhw5l48aNbNiwgaVLl+Ln51eiTTc3Nz7//HPee++9AtsHDx5McnJyqW1dbvny5aSkpLB161amTp2Km5vzHsrLyn3xdvdKsvXBBx/Qu3dvBg8eXGD7ypUrGTRoEIMHD+azzz4rcNvhw4eJj49n+fLlRWplZmbSsmVLwsLCaNCgAZMnTwZg+PDhVK9eHbvdjt1uJzExEYBVq1YRFRVFeHg4UVFRrF271iVbBw8e5Omnn6Z169Y8+uijzJo1C4AxY8bQqlUr2rRpQ69evcjLywPgm2++oUOHDkRHR9OhQwc2btxY6FZhlNb7olp6rCoqlx88EhIS6NGjB8HBwQQHBxMdHa2WC7es7qnl2q3/+7//o3PnzgW2TZo0iYcffpgmTZqwYsUKXnnllRLrAXTr1o2ff/65wLZ69erh4+NToh2rW5d76qmnsNvtNGzYkCpVqhATE+O0Vlm5L97uXkm2mjZtyqBBgwps27VrF1u2bGHUqFG89dZbtG3btsDtn376KQ0aNChyy93dnfHjx7N9+3a+/fZbEhIS2LVrFwD9+vUjJSWFlJQUR69y5cosXbqU1NRUZs6cyTPPPOOyrVdffZWVK1eyaNEi5s6dS3p6uuNxKSkpifvuu49p06YBcO+99/LBBx+wYsUKxo8fz4ABAwrdKozSel9US49VReXSg4efnx8+Pj6O3xzOmTOHjh07quWiLat7arl+a+PGjRw9erTAtt9//93xsaenJ8aYEuv5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mDhxIhMnTuTRRx/lscceK9LQYYyhR48e1K1bl/79+zu25+TkOD5eunQpoaGhABw7dowOHTowevRoGjduXKRjsLJ1PXv37mXjxo089dRTjtfLwMXXfhw6dIhz585x4cIF9u/fT+XKlUukWdbui2qV3p4VLZsxpkQXvGHMZityzG63M3v2bMqXL09SUhJ9+vRxxpemVintqaWWq/TUKl0tq3vFac2dO7fA9alTp7J7925OnDiBj48PnTt3pkmTJnzwwQfs378fd3d3YmNjHT+gX7J48WI8PDxo167ddVuxsbEFrm/YsIHmzZsTFhbmeDH1iBEjmD9/Plu3bsVms1GjRg0SEhLw9/dn1KhRjB07luDgYMcaSUlJVK1a9abH6czWm2++edW2RYsWsX//fk6dOkWFChVo3rw5GzZs4Pz5844XnQcFBTn+vLZt2+Z4bUft2rWvO8Bdq3UzpeW+qJb1Lat7xWkZY2w328flBw8REZE/sisHD2e6cvAoK25lGCgNLRFXUpjBw6WfaiUiIiIiImWDBg8REREREXE6DR4iIiIiIuJ0GjxERERERMTpNHiIiIiIiIjTafAQERERERGn0+AhIiIiIiJOp8FDREREREScToOHiIiIiIg4nfvt/gJERERKk2rVqlnaq1evnqW9smjz5s23+0sQEXTGQ0RERERELKDBQ0REREREnE6Dh4iIiIiIOJ0GDxERERERcToNHiIiIiIi4nQaPERERERExOk0eIiIiIiIiNNp8BAREREREadz+cEjMjKSbdu2kZ6ezqRJk9Ry8ZbVPbXUcpWeWqWr5cyev78/8+bNY82aNaxevZru3bsDULduXZYsWcLKlSuZOXMmXl5et7R+bm4uzz//PDExMXTp0oVPP/0UgOPHj9O7d286duxI7969ycvLA+D777/nkUceITY2ltjYWGbMmFHoVmZmJi1btiQsLIwGDRowefJkAIYPH0716tWx2+3Y7XYSExMBWLVqFVFRUYSHhxMVFcXatWtdsnWlwMBApkyZ4rgsXLiQxx9/3HF7p06dSExMxMfH55YbN1JWv8/UKn09p7eMMZZdAFPUS3JysmnUqJEBTGJioomOji7yGmpZ1yrLx6ZW6WqV5WNT6/b2qlWrdsOL3W43bdq0MdWqVTMhISEmIyPDtGjRwqSmppqYmBhTrVo1M2DAAPPuu+/edK1q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6TR4iIiIiIiI02nwEBERERERp9PgISIiIiIiTqfBQ0REREREnE6Dh4iIiIiIOJ0GDxERERERcTqXHzwiIyPZtm0b6enpTJo0SS0Xb1ndU0stV+mp5XqtL7/8kokTJzJjxgzHtjVr1vD+++/zwQcfsGDBAs6cOQNAdnY2H3zwgePy448/FqmVmZlJy5YtCQsLo0GDBkyePBmA4cOHU716dex2O3a7ncTERABWrVpFVFQU4eHhREVFsXbt2j9863L+/v7MmzePNWvWsHr1arp37w5A3bp1WbJkCStXrmTmzJl4eXnd0vo3o8cqtVylZXXP6S1jzA0vQDXgX8AuYCfQ77/b7wVWAen//e89hVjLFPWSnJxsGjVqZACTmJhooqOji7yGWta1yvKxqVW6WmX52NS6+vLaa69ddfnb3/5munfvbqpUqeLYFhsba4YMGWJee+0186c//cn86U9/Mq+99poZNGiQY3vfvn2Np6en4/qVl/z8/KsumZmZZtOmTSY/P98cPXrUBAcHm23btplhw4aZsWPHXrX/5s2bzYEDB0x+fr5JTU01AQEB11y3LLeqVat23Yvdbjdt2rQx1apVMyEhISYjI8O0aNHCpKammpiYGFOtWjUzYMAA8+67795wnUsXV77fl6bvM7V0/7jR5WZzgDGmUGc88oEBxph6wEPA/7PZbPWAwcAaY0wwsOa/10uUn58fPj4+JCcnAzBnzhw6duxY0hm1SmlPLbVcpaeWa7aqV69O+fLlC2y7//77cXO7+FdfQEAAeXl5ANxxxx2O7efPn8dmsxWp5e/vT2RkJADe3t6EhISQnZ193f0jIiIICAgAIDQ0lNOnT3P27Nk/dOtyhw4dYseOHQCcPHmSvXv34ufnR82aNR33kW+++Ya2bdsWee2b0WOVWq7SsrpnReumg4cxJscYs+W/H/8O7AYCgceBj/+728dAif8pBAYGkpWV5bielZVFYGBgSWfUKqU9tdRylZ5apat1ydatW6lVq5bjenZ2NtOnT2fGjBlER0c7BpGi2rdvH6mpqTRq1AiAadOmERERQXx8PEePHr1q/8WLFxMREYGHh4da1xAUFERoaCg//PADaWlptG7dGoB27drh7+9frLWvRY9VarlKy+qeFa0iParabLb7gAggGfA1xuT896ZcwLdEvzIREREn2bBhA25ubtSvX9+xLTAwkJ49e9K9e3c2btxIfn5+kdc9ceIEXbt2ZcKECfj4+NCrVy/S0tJISUnBz8+PgQMHFth/586dDBkyhISEBLWuwdPTk+nTpzN8+HBOnDjBwIEDiYuLY/ny5Xh5eXHu3LlirS8i1ir04GGz2byARcBLxpi8y28zF1/AYa7zec/bbLbvbTbb90X94rKzswkKCnJcDwoKuuEp3uJQq/T11FLLVXpqla7W1q1b2bt3Lx07drzmU6oqV67MnXfeyaFDh4q07rlz5+jSpQuxsbF06tQJAF9fX8qVK4ebmxvx8fFs3rzZsX9WVhYxMTHMmjWrwJmXP3Lrcu7u7kyfPp0lS5awYsUKADIyMujWrRvt2rVj2bJl7N+//5bXvx49VqnlKi2re1a0CjV42Gy2O7g4dPyfMWbxfzf/YrPZ/P97uz9wzUdoY8wMY8wDxpgHivrF5ebmkpeX5zitGxcXx7Jly4q6jFoWtazuqaWWq/TUKj2tjIwMvvvuO7p06cIdd9zh2H7s2DEuXLgAwPHjxzly5Ah33313odc1xtCjRw/q1q1L//79HdtzcnIcHy9dupTQ0FBHr0OHDowePZrGjRsX6RjKautK48ePZ+/evXz44YeObZUqVQLAZrPRt29fPvnkk2I1rkWPVWq5SsvqniWtQrwTlQ2YA7x7xfbxwOD/fjwYGOeMd7Wy2+1m+/btZu/evWbKlClOfdcAtUpfTy21XKWn1u1tXevdp+rVq2cqVKhg3NzcjLe3t2nXrp255557jLe3t6lataqpWrWqiYiIMK+99prp0KGDqVy5sqlatarx9fU1MTEx11zzeu9qtW7dOgOYsLAw07BhQ9OwYUPzxRdfmL/+9a+mfv36JiwszLRv395kZmaa/Px8M3z4cOPp6enYt2HDhubgwYOFeqepstK60btQde7c2RhjzK5du8yOHTvMjh07TFxcnPnHP/5hMjIyTEZGhpk6dWqh3tHqVt7VSo9VarlKqzQdW2He1cr234Hgumw2WxPgG2A7cOG/m1/l4us8PgeqA/uBrsaY326y1o1jIiIit+C1116zrDV8+HDLWmVZzZo1LWtlZmZa1hL5ozLG3PTtAN0LscgGLp71uJaWRf2iRERERETkj8fl/+VyEREREREp/TR4iIiIiIiI02nwEBERERERp9PgISIiIiIiTqfBQ0REREREnE6Dh4iIiIiIOJ0GDxERERERcToNHiIiIiIi4nQ3/QcERUSk7PDz87Os1bdvX8tar7zyimUtY4xlLautW7fOstbx48cta4mIa9AZDxERERERcToNHiIiIiIi4nQaPERERERExOk0eIiIiIiIiNNp8BAREREREafT4CEiIiIiIk6nwUNERERERJxOg4eIiIiIiDidBg8REREREXE6lx88IiMj2bZtG+np6UyaNEktF29Z3VNLLVfplYVWQEAACxcuZP369axbt474+PgCt/fs2ZOcnBzuvffeW24sWrSIUaNG8e677zq2rVq1ismTJzNlyhRmzpxJXl5egc/Jyspi6NChbN++vdCdzMxMWrZsSf369QkLC2Py5MkADB8+nGrVqhEZGUlkZCSJiYkAbNq0ybEtIiKCJUuWFOm4LvXCwsJo0KBBgV716tWx2+3Y7XZHb9WqVURFRREeHk5UVBRr1651ydb48eOJiYkpcF/Yu3cvL774Ij179qR37978+OOPAJw4cYKhQ4fy/PPP89xzz7FixYpCd67lvffeY+/evfz73/++6rYXX3yR48ePF+u+eCN6rFLLVVpW95zdcvnBIyEhgR49ehAcHExwcDDR0dFquXDL6p5aarlKryy08vPzGT58OM2aNaNdu3Y888wz1KlTB7g4lDRv3pysrKxiNSIjI3nmmWcKbGvatCl9+/alT58+hISEFPjB+MKFC6xYsYLatWsXqePu7s748ePZsWMHGzduZNq0aezatQuAl156iS1btrBlyxbatm0LQP369dm0aRNbtmwhMTGRF154gfz8/CL3tm/fzrfffktCQoKj169fP1JSUkhJSXH0KleuzNKlS0lNTWXmzJlX/Zm4SuvRRx9lzJgxBbZ98MEHxMXFMX36dP7+978zY8YMAL744gtq1KjBjBkzeOedd5g+fTrnzp0rdOtKn376KU888cRV2wMDA2nRogUHDhy45bVvRo9VarlKy+qes1suPXj4+fnh4+NDcnIyAHPmzKFjx45quWjL6p5aarlKr6y0Dh065DircPLkSdLT0/Hz8wMu/jZ9xIgRGGOK1ahZsyaenp4Ftt11112Oj//zn/8UuO3f//43oaGheHl5Fanj7+9PZGQkAN7e3oSEhJCdnX3d/T09PXF3dwfgzJkz2Gw2p/YiIiIICAgAIDQ0lNOnT3P27FmXazVo0ABvb++rtp88edLx30qVKjm2nzp1CmMMp0+fxtvbm3LlyhWqcy0bN27k6NGjV20fM2YMr7/+erHvi9ejxyq1XKVldc+KlksPHoGBgQV+u5aVlUVgYKBaLtqyuqeWWq7SK4utoKAgwsLC2LJlC48++ii5ubmO36o7w8qVKxk7diypqam0atUKgOPHj7Nz504aNWpUrLX37dtHamqqY52pU6cSHh7Oc889V+AH2+TkZMLCwmjYsCHTpk1zDCLF7U2bNo2IiAji4+Ov+YP04sWLiYiIwMPDw6Vbl/Tu3ZsZM2YQGxvL9OnTHU/D6tixIwcOHODJJ5+kR48e9O7dGze3kv0xo23bthw8eJAdO3aU6LqX02OVWq7SsrpnRculBw8REbGep6cnH330Ea+//jrnz5+nb9++jBs3zqnN1q1b88orrxAeHs53330HwPLly4mOji7WD68nTpygS5cuTJgwAR8fH3r16kV6ejpbtmzB39+fl19+2bFvo0aN2L59O8nJyYwdO5YzZ87cUq9r164FemlpaaSkpODn58fAgQML7L9z506GDBlCQkKCS7cu9+WXX/LCCy/w2Wef8cILL/D2228D8P3331OrVi3mz5/P9OnTee+99xxnRkpC+fLlGTBgAKNHjy6xNUXEWi49eGRnZxMUFOS4HhQUdMPTyWrd3pbVPbXUcpVeWWq5u7vz0UcfsXjxYhITE6lRowbVq1dnzZo1bNq0CX9/f1auXEmVKlVKrHm58PBwx2+zs7OzmTdvHuPGjWPHjh188cUXRTrrcu7cOWJiYnj66afp3LkzAL6+vpQrVw43Nzfi4+PZvHnzVZ9Xt25dvLy8ivxb9XPnztGlSxdiY2Pp1KnTTXtZWVnExMQwa9YsatWq5bKtK61cuZKmTZsC0KxZM/bs2QPAihUraNq0KTabjcDAQPz8/MjMzCxW63I1a9akRo0abNiwgW3bthEYGMjXX39N1apVS6wBeqxSy3VaVvesaLn04JGbm0teXp7jFHJcXBzLli1Ty0VbVvfUUstVemWpNWHCBNLT05k+fToAP/74I2FhYURFRREVFUVOTg6tW7fm119/LbHm4cOHHR/v2rXLMdQMHDiQQYMGMWjQIOrXr0+HDh2oV69eodY0xhAfH0/dunXp37+/Y3tOTo7j46VLlxIaGgrAzz//7Hgx+f79+/nxxx+57777Cn0Mxhh69OhR6N6xY8fo0KEDo0ePpnHjxoXuWN26lsqVK7N161YAfvjhB8dTMapWrcqWLVsAOHr0KJmZmfj7+xe7d8muXbuoXbs2DRo0oEGDBmRnZ/PII49w6NChEmuAHqvUcp2W1T0rWjZnvTjrmjGbrcgxu93O7NmzKV++PElJSfTp08cZX5papbSnllqu0istrUsvFr+WqKgoli1bxq5du7hw4QJw8YW8l7/L1KZNm4iOjua33367aatv375XbZs3bx4///wzJ0+exMvLi1atWrFnzx5+/fVX3NzcuPvuu3n88cepWLFigc9buHAh//M//0NYWNg1W6+88kqB6xs2bKBZs2aEhYU5nqo1cuRI5s2bx9atW7HZbNSoUYP3338ff39/5s6dy7hx47jjjjtwc3Nj6NCh131R5bX+3tywYQPNmzcv0BsxYgTz588v0EtISMDf359Ro0YxduxYgoODHWskJSUV6rf3zmytW7euwPVRo0axdetWjh8/zj333MPf//53goKCmDZtGufPn+fOO++kb9++1KlTh8OHDzN+/HiOHDkCwFNPPeV4vc61XDoLdT0fffQRTZo0oVKlShw6dIgxY8Ywd+5cx+3btm2jefPmhbovXvkWzTejxyq1XKVlda84LWPMTd+Vw+UHDxERKTk3GjxK2rUGD2e5cvBwJiv/3rTalYOHM91s8ChJRR08RKToCjN4uPRTrUREREREpGzQ4CEiIiIiIk6nwUNERERERJxOg4eIiIiIiDidBg8REREREXE6DR4iIiIiIuJ0GjxERERERMTpNHiIiIiIiIjTafAQERERERGnc7/dX4CIiKsJDw+3rJWYmGhZC8DT09OylpeXl2Wtsmz16tWWtTp27GhZ68yZM5a1RMQ16IyHiIiIiIg4nQYPERERERFxOg0eIiIiIiLidBo8RERERETE6TR4iIiIiIiI02nwEBERERERp9PgISIiIiIiTqfBQ0REREREnM7lB4/IyEi2bdtGeno6kyZNUsvFW1b31FLrdvbc3Nz47LPPHGtHRUXx6aefMm/ePGbOnEm1atVuad3s7GxiYmJo1qwZzZs358MPPwRg3LhxtGzZklatWvHUU0+Rm5sLgDGGoUOH8vDDD9OyZUu2bdtW6FZWVhbt27enUaNGPPTQQyQkJBS4fcqUKdx9990cOXLE0Ro0aBARERE8/PDDpKamFrqV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4weyojLGMGDAAIKDgwu8c9FPP/3k+Pif//wntWvXBqB169YsXLgQYwwpKSn4+Pjg6+tb6NaLL75InTp1ePHFF4GLrznYu3cv27dvZ/v27QQEBLB+/Xp8fX1p06YN8+bNwxjD5s2b8fHxKfSQY4yhR48e1K1bl/79+zu2X/5UraVLlxIaGgrAsWPH6NChA6NHj3b8UF1Yxhji4+ML3fr555/Jz88HLj7l7Mcff+S+++4rUs+qY7uWSpUqOd7NLDU11fHUu48//pg5c+YwZ84cmjRpwosvvsjDDz9c7B5cHDpDQkKoXLkyAC1btrzq3bRKih6r1PojtqzuWdG6tSewWqh3797Mnj2b8uXLk5SURFJSklou3LK6p5ZartI7f/48I0aM4O2338YYQ15eHm+88cYtrbVp0yYWLlxI3bp1adWqFQBDhgzhs88+IyMjAzc3NwIDAxk7dixw8Qe+NWvW8PDDD1O+fHnH02wK47vvvmP+/PnUq1ePJk2aAPD666/TunXra+7funVrVq1aRUREBJ6enkydOrXQrW+//ZZPPvmEsLAw7HY7ACNGjGD+/Pls3boVm81GjRo1HE87mjp1Knv37mXkyJGMHDkSgKSkJKpWrVqk1qXXx4wcOZJ58+YVaL3//vsAbNiwgXHjxnHHHXfg5ubGe++95/iB2tWObcyYMWzbto28vDy6detGt27d6NevH++//z7nz5/nzjvvpF+/foX+2m9VTk4Oo0ePZtWqVZw7d44DBw7w/PPPO62nxyq1/ogtq3vObtn++za3lrDZbNbFRERu0aV3ebLCpadLWcXT09OylpeXl2Wtor4LVXFY+fcmXHwalVWc+e48V7qV19CIiOsyxtz0gdiln2olIiIiIiJlgwYPERERERFxOg0eIiIiIiLidBo8RERERETE6TR4iIiIiIiI02nwEBERERERp9PgISIiIiIiTqfBQ0REREREnE6Dh4iIiIiIOJ3+5XIRKRV8fX0tayUnJ1vWCgoKsqxV/UVN5QAAHOZJREFUlv3222+WtdavX29ZC6B3796WtX799VfLWiJStuhfLhcREREREZegwUNERERERJxOg4eIiIiIiDidBg8REREREXE6DR4iIiIiIuJ0GjxERERERMTpNHiIiIiIiIjTafAQERERERGnc/nBIzIykm3btpGens6kSZPUcvGW1T211Lok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\n",
      "text/plain": [
       "<Figure size 1008x1008 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "fig, ax = plt.subplots(figsize = (14, 14)) \n",
    "\n",
    "i = randint(0, len(X_train))\n",
    "img = X_train[i]\n",
    "\n",
    "ax.imshow(img, cmap='gray')\n",
    "ax.set_title('Digit: {}'.format(y_train[i]), fontsize=16)\n",
    "\n",
    "width, height = img.shape\n",
    "thresh = img.max()/2.5\n",
    "for x in range(width):\n",
    "    for y in range(height):\n",
    "        ax.annotate('{:2}'.format(img[x][y]), \n",
    "                    xy=(y,x),\n",
    "                    horizontalalignment='center',\n",
    "                    verticalalignment='center',\n",
    "                    color='white' if img[x][y]<thresh else 'black')"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Prepare Data"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Rescale pixel values"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "We rescale the pixel values to the range [0, 1] to normalize the training data and faciliate the backpropagation process and convert the data to 32 bit floats that reduce memory requirements and computational cost while providing sufficient precision for our use case:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2017-06-02T19:25:38.590257Z",
     "start_time": "2017-06-02T19:25:38.325027Z"
    }
   },
   "outputs": [],
   "source": [
    "# rescale [0,255] --> [0,1]\n",
    "X_train = X_train.astype('float32')/255\n",
    "X_test = X_test.astype('float32')/255 "
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### One-Hot Label Encoding using Keras"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Print first ten labels"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Integer-valued labels:\n",
      "[5 0 4 1 9 2 1 3 1 4]\n"
     ]
    }
   ],
   "source": [
    "print('Integer-valued labels:')\n",
    "print(y_train[:10])"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "We also need to convert the one-dimensional label to 10-dimensional one-hot encoding to make it compatible with the cross-entropy loss that receives a 10-class softmax output from the network:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2017-06-02T19:25:43.260974Z",
     "start_time": "2017-06-02T19:25:43.240904Z"
    }
   },
   "outputs": [],
   "source": [
    "# one-hot encode the labels\n",
    "y_train = np_utils.to_categorical(y_train, 10)\n",
    "y_test = np_utils.to_categorical(y_test, 10)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([[0., 0., 0., 0., 0., 1., 0., 0., 0., 0.],\n",
       "       [1., 0., 0., 0., 0., 0., 0., 0., 0., 0.],\n",
       "       [0., 0., 0., 0., 1., 0., 0., 0., 0., 0.],\n",
       "       [0., 1., 0., 0., 0., 0., 0., 0., 0., 0.],\n",
       "       [0., 0., 0., 0., 0., 0., 0., 0., 0., 1.],\n",
       "       [0., 0., 1., 0., 0., 0., 0., 0., 0., 0.],\n",
       "       [0., 1., 0., 0., 0., 0., 0., 0., 0., 0.],\n",
       "       [0., 0., 0., 1., 0., 0., 0., 0., 0., 0.],\n",
       "       [0., 1., 0., 0., 0., 0., 0., 0., 0., 0.],\n",
       "       [0., 0., 0., 0., 1., 0., 0., 0., 0., 0.]], dtype=float32)"
      ]
     },
     "execution_count": 7,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# print first ten (one-hot) training labels\n",
    "y_train[:10]"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Feed-Forward NN"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Model Architecture"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 35,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2017-06-02T19:25:49.588801Z",
     "start_time": "2017-06-02T19:25:49.349722Z"
    }
   },
   "outputs": [],
   "source": [
    "model = Sequential()\n",
    "model.add(Flatten(input_shape=X_train.shape[1:]))\n",
    "model.add(Dense(512, activation='relu'))\n",
    "model.add(Dropout(0.2))\n",
    "model.add(Dense(512, activation='relu'))\n",
    "model.add(Dropout(0.2))\n",
    "model.add(Dense(10, activation='softmax'))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 36,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "_________________________________________________________________\n",
      "Layer (type)                 Output Shape              Param #   \n",
      "=================================================================\n",
      "flatten_1 (Flatten)          (None, 784)               0         \n",
      "_________________________________________________________________\n",
      "dense_1 (Dense)              (None, 512)               401920    \n",
      "_________________________________________________________________\n",
      "dropout_1 (Dropout)          (None, 512)               0         \n",
      "_________________________________________________________________\n",
      "dense_2 (Dense)              (None, 512)               262656    \n",
      "_________________________________________________________________\n",
      "dropout_2 (Dropout)          (None, 512)               0         \n",
      "_________________________________________________________________\n",
      "dense_3 (Dense)              (None, 10)                5130      \n",
      "=================================================================\n",
      "Total params: 669,706\n",
      "Trainable params: 669,706\n",
      "Non-trainable params: 0\n",
      "_________________________________________________________________\n"
     ]
    }
   ],
   "source": [
    "model.summary()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Compile the Model"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 37,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2017-06-02T19:25:53.793813Z",
     "start_time": "2017-06-02T19:25:53.725841Z"
    }
   },
   "outputs": [],
   "source": [
    "model.compile(loss='categorical_crossentropy', \n",
    "              optimizer='rmsprop', \n",
    "              metrics=['accuracy'])"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Calculate Baseline Classification Accuracy"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2017-06-02T19:25:57.929316Z",
     "start_time": "2017-06-02T19:25:57.280903Z"
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Test accuracy: 10.4200%\n"
     ]
    }
   ],
   "source": [
    "# evaluate test accuracy\n",
    "score = model.evaluate(X_test, y_test, verbose=0)\n",
    "accuracy = 100*score[1]\n",
    "\n",
    "# print test accuracy\n",
    "print('Test accuracy: %.4f%%' % accuracy)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Callback for model persistence"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "mnist_path = 'models/mnist.ffn.best.hdf5'"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 39,
   "metadata": {},
   "outputs": [],
   "source": [
    "checkpointer = ModelCheckpoint(filepath=mnist_path, \n",
    "                               verbose=1, \n",
    "                               save_best_only=True)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Train the Model"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 40,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2017-06-02T19:26:54.183115Z",
     "start_time": "2017-06-02T19:26:03.367957Z"
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Train on 48000 samples, validate on 12000 samples\n",
      "Epoch 1/10\n",
      "48000/48000 [==============================] - 4s 76us/step - loss: 12.3566 - acc: 0.2327 - val_loss: 11.6693 - val_acc: 0.2757\n",
      "\n",
      "Epoch 00001: val_loss improved from inf to 11.66925, saving model to mnist.model.best.hdf5\n",
      "Epoch 2/10\n",
      "48000/48000 [==============================] - 3s 69us/step - loss: 11.6842 - acc: 0.2748 - val_loss: 11.6416 - val_acc: 0.2775\n",
      "\n",
      "Epoch 00002: val_loss improved from 11.66925 to 11.64164, saving model to mnist.model.best.hdf5\n",
      "Epoch 3/10\n",
      "48000/48000 [==============================] - 3s 67us/step - loss: 11.5629 - acc: 0.2825 - val_loss: 11.6896 - val_acc: 0.2746\n",
      "\n",
      "Epoch 00003: val_loss did not improve from 11.64164\n",
      "Epoch 4/10\n",
      "48000/48000 [==============================] - 3s 67us/step - loss: 11.5198 - acc: 0.2851 - val_loss: 11.5825 - val_acc: 0.2812\n",
      "\n",
      "Epoch 00004: val_loss improved from 11.64164 to 11.58248, saving model to mnist.model.best.hdf5\n",
      "Epoch 5/10\n",
      "48000/48000 [==============================] - 3s 68us/step - loss: 11.2811 - acc: 0.2997 - val_loss: 10.6698 - val_acc: 0.3377\n",
      "\n",
      "Epoch 00005: val_loss improved from 11.58248 to 10.66979, saving model to mnist.model.best.hdf5\n",
      "Epoch 6/10\n",
      "48000/48000 [==============================] - 3s 69us/step - loss: 10.7881 - acc: 0.3304 - val_loss: 10.7308 - val_acc: 0.3339\n",
      "\n",
      "Epoch 00006: val_loss did not improve from 10.66979\n",
      "Epoch 7/10\n",
      "48000/48000 [==============================] - 3s 68us/step - loss: 10.8279 - acc: 0.3279 - val_loss: 10.7680 - val_acc: 0.3317\n",
      "\n",
      "Epoch 00007: val_loss did not improve from 10.66979\n",
      "Epoch 8/10\n",
      "48000/48000 [==============================] - 3s 69us/step - loss: 10.5991 - acc: 0.3421 - val_loss: 10.5127 - val_acc: 0.3476\n",
      "\n",
      "Epoch 00008: val_loss improved from 10.66979 to 10.51270, saving model to mnist.model.best.hdf5\n",
      "Epoch 9/10\n",
      "48000/48000 [==============================] - 3s 68us/step - loss: 10.3517 - acc: 0.3575 - val_loss: 10.1866 - val_acc: 0.3680\n",
      "\n",
      "Epoch 00009: val_loss improved from 10.51270 to 10.18657, saving model to mnist.model.best.hdf5\n",
      "Epoch 10/10\n",
      "48000/48000 [==============================] - 3s 69us/step - loss: 10.4410 - acc: 0.3520 - val_loss: 10.3458 - val_acc: 0.3581\n",
      "\n",
      "Epoch 00010: val_loss did not improve from 10.18657\n"
     ]
    }
   ],
   "source": [
    "hist = model.fit(X_train, \n",
    "                 y_train, \n",
    "                 batch_size=128, \n",
    "                 epochs=10,\n",
    "                 validation_split=0.2, \n",
    "                 callbacks=[checkpointer],\n",
    "                 verbose=1, \n",
    "                 shuffle=True)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Load the Best Model"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 41,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2017-06-02T19:27:04.169465Z",
     "start_time": "2017-06-02T19:27:04.117531Z"
    }
   },
   "outputs": [],
   "source": [
    "# load the weights that yielded the best validation accuracy\n",
    "model.load_weights(mnist_path)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Test Classification Accuracy"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 44,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2017-06-02T19:27:09.346076Z",
     "start_time": "2017-06-02T19:27:08.831110Z"
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Test accuracy: 37.36%\n"
     ]
    }
   ],
   "source": [
    "# evaluate test accuracy\n",
    "accuracy = model.evaluate(X_test, y_test, verbose=0)[1]\n",
    "\n",
    "print(f'Test accuracy: {accuracy:.2%}')"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## LeNet5"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 33,
   "metadata": {},
   "outputs": [],
   "source": [
    "K.clear_session()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "We can define a simplified version of LeNet5 that omits the original final layer containing radial basis functions as follows, using the default ‘valid’ padding and single step strides unless defined otherwise:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 34,
   "metadata": {},
   "outputs": [],
   "source": [
    "lenet5 = Sequential([\n",
    "    Conv2D(filters=6, kernel_size=5, activation='relu', input_shape=(28, 28, 1), name='CONV1'),\n",
    "    AveragePooling2D(pool_size=(2, 2), strides=(1, 1), padding='valid', name='POOL1'),\n",
    "    Conv2D(filters=16, kernel_size=(5, 5), activation='tanh', name='CONV2'),\n",
    "    AveragePooling2D(pool_size=(2, 2), strides=(2, 2), name='POOL2'),\n",
    "    Conv2D(filters=120, kernel_size=(5, 5), activation='tanh', name='CONV3'),\n",
    "    Flatten(name='FLAT'),\n",
    "    Dense(units=84, activation='tanh', name='FC6'),\n",
    "    Dense(units=10, activation='softmax', name='FC7')\n",
    "])"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "The summary indicates that the model thus defined has over 300,000 parameters:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 35,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "_________________________________________________________________\n",
      "Layer (type)                 Output Shape              Param #   \n",
      "=================================================================\n",
      "CONV1 (Conv2D)               (None, 24, 24, 6)         156       \n",
      "_________________________________________________________________\n",
      "POOL1 (AveragePooling2D)     (None, 23, 23, 6)         0         \n",
      "_________________________________________________________________\n",
      "CONV2 (Conv2D)               (None, 19, 19, 16)        2416      \n",
      "_________________________________________________________________\n",
      "POOL2 (AveragePooling2D)     (None, 9, 9, 16)          0         \n",
      "_________________________________________________________________\n",
      "CONV3 (Conv2D)               (None, 5, 5, 120)         48120     \n",
      "_________________________________________________________________\n",
      "FLAT (Flatten)               (None, 3000)              0         \n",
      "_________________________________________________________________\n",
      "FC6 (Dense)                  (None, 84)                252084    \n",
      "_________________________________________________________________\n",
      "FC7 (Dense)                  (None, 10)                850       \n",
      "=================================================================\n",
      "Total params: 303,626\n",
      "Trainable params: 303,626\n",
      "Non-trainable params: 0\n",
      "_________________________________________________________________\n"
     ]
    }
   ],
   "source": [
    "lenet5.summary()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "We compile using crossentropy loss and the original stochastic gradient optimizer:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 36,
   "metadata": {},
   "outputs": [],
   "source": [
    "lenet5.compile(loss=categorical_crossentropy,\n",
    "               optimizer='SGD',\n",
    "               metrics=['accuracy'])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 37,
   "metadata": {},
   "outputs": [],
   "source": [
    "lenet_path = 'models/mnist.lenet.best.hdf5'"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 38,
   "metadata": {},
   "outputs": [],
   "source": [
    "checkpointer = ModelCheckpoint(filepath=lenet_path,\n",
    "                               verbose=1,\n",
    "                               save_best_only=True)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Now we are ready to train the model. The model expects 4D input so we reshape accordingly. We use the standard batch size of 32, 80-20 train-validation split, use checkpointing to store the model weights if the validation error improves, and make sure the dataset is randomly shuffled:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 42,
   "metadata": {
    "scrolled": false
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Train on 48000 samples, validate on 12000 samples\n",
      "Epoch 1/50\n",
      "48000/48000 [==============================] - 3s 63us/step - loss: 0.0051 - acc: 0.9995 - val_loss: 0.0058 - val_acc: 0.9994\n",
      "\n",
      "Epoch 00001: val_loss improved from inf to 0.00576, saving model to models/mnist.lenet.best.hdf5\n",
      "Epoch 2/50\n",
      "48000/48000 [==============================] - 3s 62us/step - loss: 0.0049 - acc: 0.9995 - val_loss: 0.0058 - val_acc: 0.9993\n",
      "\n",
      "Epoch 00002: val_loss did not improve from 0.00576\n",
      "Epoch 3/50\n",
      "48000/48000 [==============================] - 3s 66us/step - loss: 0.0046 - acc: 0.9996 - val_loss: 0.0063 - val_acc: 0.9992\n",
      "\n",
      "Epoch 00003: val_loss did not improve from 0.00576\n",
      "Epoch 4/50\n",
      "48000/48000 [==============================] - 3s 66us/step - loss: 0.0044 - acc: 0.9996 - val_loss: 0.0063 - val_acc: 0.9989\n",
      "\n",
      "Epoch 00004: val_loss did not improve from 0.00576\n",
      "Epoch 5/50\n",
      "48000/48000 [==============================] - 3s 69us/step - loss: 0.0043 - acc: 0.9996 - val_loss: 0.0065 - val_acc: 0.9988\n",
      "\n",
      "Epoch 00005: val_loss did not improve from 0.00576\n",
      "Epoch 6/50\n",
      "48000/48000 [==============================] - 3s 69us/step - loss: 0.0042 - acc: 0.9996 - val_loss: 0.0064 - val_acc: 0.9991\n",
      "\n",
      "Epoch 00006: val_loss did not improve from 0.00576\n",
      "Epoch 7/50\n",
      "48000/48000 [==============================] - 3s 69us/step - loss: 0.0041 - acc: 0.9997 - val_loss: 0.0070 - val_acc: 0.9988\n",
      "\n",
      "Epoch 00007: val_loss did not improve from 0.00576\n",
      "Epoch 8/50\n",
      "48000/48000 [==============================] - 3s 69us/step - loss: 0.0040 - acc: 0.9997 - val_loss: 0.0067 - val_acc: 0.9989\n",
      "\n",
      "Epoch 00008: val_loss did not improve from 0.00576\n",
      "Epoch 9/50\n",
      "48000/48000 [==============================] - 3s 72us/step - loss: 0.0039 - acc: 0.9996 - val_loss: 0.0070 - val_acc: 0.9988\n",
      "\n",
      "Epoch 00009: val_loss did not improve from 0.00576\n",
      "Epoch 10/50\n",
      "48000/48000 [==============================] - 3s 70us/step - loss: 0.0038 - acc: 0.9997 - val_loss: 0.0067 - val_acc: 0.9990\n",
      "\n",
      "Epoch 00010: val_loss did not improve from 0.00576\n",
      "Epoch 11/50\n",
      "48000/48000 [==============================] - 3s 67us/step - loss: 0.0036 - acc: 0.9997 - val_loss: 0.0069 - val_acc: 0.9985\n",
      "\n",
      "Epoch 00011: val_loss did not improve from 0.00576\n",
      "Epoch 12/50\n",
      "48000/48000 [==============================] - 3s 70us/step - loss: 0.0035 - acc: 0.9997 - val_loss: 0.0070 - val_acc: 0.9986\n",
      "\n",
      "Epoch 00012: val_loss did not improve from 0.00576\n",
      "Epoch 13/50\n",
      "48000/48000 [==============================] - 3s 70us/step - loss: 0.0034 - acc: 0.9997 - val_loss: 0.0069 - val_acc: 0.9988\n",
      "\n",
      "Epoch 00013: val_loss did not improve from 0.00576\n",
      "Epoch 14/50\n",
      "48000/48000 [==============================] - 3s 71us/step - loss: 0.0033 - acc: 0.9998 - val_loss: 0.0069 - val_acc: 0.9987\n",
      "\n",
      "Epoch 00014: val_loss did not improve from 0.00576\n",
      "Epoch 15/50\n",
      "48000/48000 [==============================] - 3s 71us/step - loss: 0.0032 - acc: 0.9997 - val_loss: 0.0071 - val_acc: 0.9986\n",
      "\n",
      "Epoch 00015: val_loss did not improve from 0.00576\n",
      "Epoch 16/50\n",
      "48000/48000 [==============================] - 3s 72us/step - loss: 0.0031 - acc: 0.9998 - val_loss: 0.0072 - val_acc: 0.9985\n",
      "\n",
      "Epoch 00016: val_loss did not improve from 0.00576\n",
      "Epoch 17/50\n",
      "48000/48000 [==============================] - 3s 71us/step - loss: 0.0031 - acc: 0.9998 - val_loss: 0.0073 - val_acc: 0.9988\n",
      "\n",
      "Epoch 00017: val_loss did not improve from 0.00576\n",
      "Epoch 18/50\n",
      "48000/48000 [==============================] - 3s 69us/step - loss: 0.0030 - acc: 0.9998 - val_loss: 0.0075 - val_acc: 0.9983\n",
      "\n",
      "Epoch 00018: val_loss did not improve from 0.00576\n",
      "Epoch 19/50\n",
      "48000/48000 [==============================] - 4s 73us/step - loss: 0.0029 - acc: 0.9998 - val_loss: 0.0073 - val_acc: 0.9985\n",
      "\n",
      "Epoch 00019: val_loss did not improve from 0.00576\n",
      "Epoch 20/50\n",
      "48000/48000 [==============================] - 3s 72us/step - loss: 0.0028 - acc: 0.9998 - val_loss: 0.0075 - val_acc: 0.9982\n",
      "\n",
      "Epoch 00020: val_loss did not improve from 0.00576\n",
      "Epoch 21/50\n",
      "48000/48000 [==============================] - 3s 71us/step - loss: 0.0028 - acc: 0.9998 - val_loss: 0.0073 - val_acc: 0.9985\n",
      "\n",
      "Epoch 00021: val_loss did not improve from 0.00576\n",
      "Epoch 22/50\n",
      "48000/48000 [==============================] - 3s 66us/step - loss: 0.0027 - acc: 0.9999 - val_loss: 0.0074 - val_acc: 0.9983\n",
      "\n",
      "Epoch 00022: val_loss did not improve from 0.00576\n",
      "Epoch 23/50\n",
      "48000/48000 [==============================] - 3s 64us/step - loss: 0.0027 - acc: 0.9998 - val_loss: 0.0076 - val_acc: 0.9986\n",
      "\n",
      "Epoch 00023: val_loss did not improve from 0.00576\n",
      "Epoch 24/50\n",
      "48000/48000 [==============================] - 3s 71us/step - loss: 0.0026 - acc: 0.9999 - val_loss: 0.0076 - val_acc: 0.9982\n",
      "\n",
      "Epoch 00024: val_loss did not improve from 0.00576\n",
      "Epoch 25/50\n",
      "48000/48000 [==============================] - 3s 72us/step - loss: 0.0026 - acc: 0.9999 - val_loss: 0.0077 - val_acc: 0.9981\n",
      "\n",
      "Epoch 00025: val_loss did not improve from 0.00576\n",
      "Epoch 26/50\n",
      "48000/48000 [==============================] - 3s 70us/step - loss: 0.0025 - acc: 0.9999 - val_loss: 0.0076 - val_acc: 0.9982\n",
      "\n",
      "Epoch 00026: val_loss did not improve from 0.00576\n",
      "Epoch 27/50\n",
      "48000/48000 [==============================] - 3s 72us/step - loss: 0.0024 - acc: 0.9999 - val_loss: 0.0079 - val_acc: 0.9981\n",
      "\n",
      "Epoch 00027: val_loss did not improve from 0.00576\n",
      "Epoch 28/50\n",
      "48000/48000 [==============================] - 3s 73us/step - loss: 0.0024 - acc: 0.9999 - val_loss: 0.0079 - val_acc: 0.9985\n",
      "\n",
      "Epoch 00028: val_loss did not improve from 0.00576\n",
      "Epoch 29/50\n",
      "48000/48000 [==============================] - 3s 68us/step - loss: 0.0023 - acc: 0.9999 - val_loss: 0.0078 - val_acc: 0.9979\n",
      "\n",
      "Epoch 00029: val_loss did not improve from 0.00576\n",
      "Epoch 30/50\n",
      "48000/48000 [==============================] - 3s 73us/step - loss: 0.0023 - acc: 0.9999 - val_loss: 0.0076 - val_acc: 0.9982\n",
      "\n",
      "Epoch 00030: val_loss did not improve from 0.00576\n",
      "Epoch 31/50\n",
      "48000/48000 [==============================] - 4s 73us/step - loss: 0.0022 - acc: 0.9999 - val_loss: 0.0077 - val_acc: 0.9980\n",
      "\n",
      "Epoch 00031: val_loss did not improve from 0.00576\n",
      "Epoch 32/50\n",
      "48000/48000 [==============================] - 3s 73us/step - loss: 0.0022 - acc: 0.9999 - val_loss: 0.0078 - val_acc: 0.9983\n",
      "\n",
      "Epoch 00032: val_loss did not improve from 0.00576\n",
      "Epoch 33/50\n",
      "48000/48000 [==============================] - 4s 73us/step - loss: 0.0021 - acc: 1.0000 - val_loss: 0.0079 - val_acc: 0.9982\n",
      "\n",
      "Epoch 00033: val_loss did not improve from 0.00576\n",
      "Epoch 34/50\n",
      "48000/48000 [==============================] - 3s 72us/step - loss: 0.0021 - acc: 0.9999 - val_loss: 0.0077 - val_acc: 0.9982\n",
      "\n",
      "Epoch 00034: val_loss did not improve from 0.00576\n",
      "Epoch 35/50\n",
      "48000/48000 [==============================] - 3s 71us/step - loss: 0.0021 - acc: 0.9999 - val_loss: 0.0078 - val_acc: 0.9982\n",
      "\n",
      "Epoch 00035: val_loss did not improve from 0.00576\n",
      "Epoch 36/50\n",
      "48000/48000 [==============================] - 3s 70us/step - loss: 0.0021 - acc: 0.9999 - val_loss: 0.0079 - val_acc: 0.9980\n",
      "\n",
      "Epoch 00036: val_loss did not improve from 0.00576\n",
      "Epoch 37/50\n",
      "48000/48000 [==============================] - 3s 65us/step - loss: 0.0020 - acc: 0.9999 - val_loss: 0.0078 - val_acc: 0.9982\n",
      "\n",
      "Epoch 00037: val_loss did not improve from 0.00576\n",
      "Epoch 38/50\n",
      "48000/48000 [==============================] - 4s 73us/step - loss: 0.0019 - acc: 0.9999 - val_loss: 0.0081 - val_acc: 0.9978\n",
      "\n",
      "Epoch 00038: val_loss did not improve from 0.00576\n",
      "Epoch 39/50\n",
      "48000/48000 [==============================] - 3s 73us/step - loss: 0.0019 - acc: 0.9999 - val_loss: 0.0079 - val_acc: 0.9980\n",
      "\n",
      "Epoch 00039: val_loss did not improve from 0.00576\n",
      "Epoch 40/50\n",
      "48000/48000 [==============================] - 3s 72us/step - loss: 0.0019 - acc: 1.0000 - val_loss: 0.0081 - val_acc: 0.9978\n",
      "\n",
      "Epoch 00040: val_loss did not improve from 0.00576\n",
      "Epoch 41/50\n",
      "48000/48000 [==============================] - 3s 72us/step - loss: 0.0018 - acc: 0.9999 - val_loss: 0.0083 - val_acc: 0.9979\n",
      "\n",
      "Epoch 00041: val_loss did not improve from 0.00576\n",
      "Epoch 42/50\n",
      "48000/48000 [==============================] - 4s 73us/step - loss: 0.0018 - acc: 1.0000 - val_loss: 0.0081 - val_acc: 0.9981\n",
      "\n",
      "Epoch 00042: val_loss did not improve from 0.00576\n",
      "Epoch 43/50\n",
      "48000/48000 [==============================] - 3s 72us/step - loss: 0.0018 - acc: 1.0000 - val_loss: 0.0081 - val_acc: 0.9979\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\n",
      "Epoch 00043: val_loss did not improve from 0.00576\n",
      "Epoch 44/50\n",
      "48000/48000 [==============================] - 3s 67us/step - loss: 0.0018 - acc: 1.0000 - val_loss: 0.0083 - val_acc: 0.9978\n",
      "\n",
      "Epoch 00044: val_loss did not improve from 0.00576\n",
      "Epoch 45/50\n",
      "48000/48000 [==============================] - 3s 65us/step - loss: 0.0017 - acc: 0.9999 - val_loss: 0.0082 - val_acc: 0.9977\n",
      "\n",
      "Epoch 00045: val_loss did not improve from 0.00576\n",
      "Epoch 46/50\n",
      "48000/48000 [==============================] - 3s 71us/step - loss: 0.0017 - acc: 1.0000 - val_loss: 0.0081 - val_acc: 0.9978\n",
      "\n",
      "Epoch 00046: val_loss did not improve from 0.00576\n",
      "Epoch 47/50\n",
      "48000/48000 [==============================] - 3s 69us/step - loss: 0.0017 - acc: 1.0000 - val_loss: 0.0083 - val_acc: 0.9981\n",
      "\n",
      "Epoch 00047: val_loss did not improve from 0.00576\n",
      "Epoch 48/50\n",
      "48000/48000 [==============================] - 3s 69us/step - loss: 0.0016 - acc: 1.0000 - val_loss: 0.0084 - val_acc: 0.9977\n",
      "\n",
      "Epoch 00048: val_loss did not improve from 0.00576\n",
      "Epoch 49/50\n",
      "48000/48000 [==============================] - 3s 68us/step - loss: 0.0016 - acc: 1.0000 - val_loss: 0.0083 - val_acc: 0.9980\n",
      "\n",
      "Epoch 00049: val_loss did not improve from 0.00576\n",
      "Epoch 50/50\n",
      "48000/48000 [==============================] - 3s 71us/step - loss: 0.0016 - acc: 1.0000 - val_loss: 0.0083 - val_acc: 0.9977\n",
      "\n",
      "Epoch 00050: val_loss did not improve from 0.00576\n"
     ]
    }
   ],
   "source": [
    "training = lenet5.fit(X_train.reshape(-1, 28, 28, 1),\n",
    "                      y_train,\n",
    "                      batch_size=32,\n",
    "                       epochs=50,\n",
    "                       validation_split=0.2, # use 0 to train on all data\n",
    "                       callbacks=[checkpointer],\n",
    "                       verbose=1,\n",
    "                       shuffle=True)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "On a single GPU, 50 epochs take around 2.5 minutes, resulting in a test accuracy of 99.19%, almost exactly the same result as for the original LeNet5:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 48,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "pd.DataFrame(training.history)[['acc','val_acc']].plot();"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 49,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Test accuracy: 99.19%\n"
     ]
    }
   ],
   "source": [
    "# evaluate test accuracy\n",
    "accuracy = lenet5.evaluate(X_test.reshape(-1, 28, 28, 1), y_test, verbose=0)[1]\n",
    "print('Test accuracy: {:.2%}'.format(accuracy))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Summary"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "For comparison, a simple two-layer feedforward network achieves only 37.36% test accuracy. \n",
    "\n",
    "The LeNet5 improvement on MNIST is, in fact, modest. Non-neural methods have also achieved classification accuracies greater than or equal to 99%, including K-Nearest Neighbours or Support Vector Machines. CNNs really shine with more challenging datasets as we will see next."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.6.8"
  },
  "toc": {
   "base_numbering": 1,
   "nav_menu": {},
   "number_sections": true,
   "sideBar": true,
   "skip_h1_title": true,
   "title_cell": "Table of Contents",
   "title_sidebar": "Contents",
   "toc_cell": false,
   "toc_position": {
    "height": "calc(100% - 180px)",
    "left": "10px",
    "top": "150px",
    "width": "353.663px"
   },
   "toc_section_display": true,
   "toc_window_display": true
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
